1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 using namespace std;
7 #define Maxn 2010
8
9 int mymin(int x,int y) {return x<y?x:y;}
10 int mymax(int x,int y) {return x>y?x:y;}
11
12 int a[Maxn][Maxn];
13 int a1=0,a2=0,rt[Maxn][Maxn],lt[Maxn][Maxn];
14 int up[Maxn][Maxn];
15 int n,m;
16
17 void get_ans()
18 {
19 for(int i=1;i<=n;i++)
20 {
21 for(int j=1;j<=m;j++)
22 {
23 if(j!=1&&a[i][j-1]==1) lt[i][j]=lt[i][j-1];
24 else lt[i][j]=j;
25 }
26 for(int j=m;j>=1;j--)
27 {
28 if(j!=m&&a[i][j+1]==1) rt[i][j]=rt[i][j+1];
29 else rt[i][j]=j;
30 }
31 }
32 for(int i=1;i<=n;i++)
33 for(int j=1;j<=m;j++) if(a[i][j]==1)
34 {
35 if(i!=1&&a[i-1][j]==1)
36 up[i][j]=up[i-1][j],lt[i][j]=mymax(lt[i][j],lt[i-1][j]),
37 rt[i][j]=mymin(rt[i][j],rt[i-1][j]);
38 else up[i][j]=i;
39 a1=mymax(a1,(i-up[i][j]+1)*(rt[i][j]-lt[i][j]+1));
40 a2=mymax(a2,mymin(i-up[i][j]+1,rt[i][j]-lt[i][j]+1));
41 }
42 }
43
44 int main()
45 {
46 scanf("%d%d",&n,&m);
47 for(int i=1;i<=n;i++)
48 for(int j=1;j<=m;j++)
49 {
50 scanf("%d",&a[i][j]);
51 if((i+j)%2==0) a[i][j]=1-a[i][j];
52 }
53 get_ans();
54 for(int i=1;i<=n;i++)
55 for(int j=1;j<=m;j++)
56 {
57 a[i][j]=1-a[i][j];
58 }
59 get_ans();
60 printf("%d\n%d\n",a2*a2,a1);
61 return 0;
62 }