#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <fstream>
#include <cstdlib>

#define rep( i, l, r ) for (int i = l; i <= r; i++)
#define down( i, l, r ) for (int i = l; i >= r; i--)
#define MS 2009
#define MAX 1073741823

using namespace std;

int num[MS][MS], n, m, l[MS][MS], r[MS][MS], h[MS][MS], ans1, ans2, a;

int main()
{
	scanf("%d%d", &n, &m);
	rep(i, 1, n) rep(j, 1, m) scanf("%d", &num[i][j]);
	rep(j, 1, m) h[1][j] = 1;
	rep(i, 1, n) { l[i][1] = 1; r[i][m] = 1; }
	rep(i, 2, n) rep(j, 1, m) if (num[i][j] != num[i-1][j]) h[i][j] = h[i-1][j] + 1; else h[i][j] = 1;
	rep(i, 1, n) rep(j, 2, m) if (num[i][j] != num[i][j-1]) l[i][j] = l[i][j-1] + 1; else l[i][j] = 1;
	rep(i, 1, n) down(j, m-1, 1) if (num[i][j] != num[i][j+1]) r[i][j] = r[i][j+1] + 1; else r[i][j] = 1;
	ans1 = ans2 = 1;
	rep(i, 1, n) rep(j, 1, m)
	{
		if (h[i][j] == 1) ans2 = max(ans2, l[i][j]+r[i][j]-1); else
		{
			l[i][j] = min(l[i][j], l[i-1][j]); 
			r[i][j] = min(r[i][j], r[i-1][j]);
			a = min(l[i][j]+r[i][j]-1, h[i][j]); ans1 = max(ans1, a);
			ans2 = max(ans2, (l[i][j]+r[i][j]-1)*h[i][j]);
		}
	}
	printf("%d\n%d\n", ans1*ans1, ans2);
	return 0;
}