#include <cstdio>
#include <algorithm>

#define Rep(i, n) for (int i = 1; i <= n; i ++)
#define Rep0(i, n) for (int i = 0; i <= n; i ++)
#define RepG(i, x) for (int i = head[x]; i; i = edge[i].next)

using namespace std;
const int N = 2010;
char m[N][N];
int d[N][N], sd[N][N];
int st[N], top;
int main()
{
	int h, w;
	scanf("%d%d", &h, &w);
	Rep(i, h) scanf("%s", m[i] + 1); 
	Rep(i, h) for (int j = 2; j <= w; j ++){
		if (m[i][j] == m[i][j - 1]) d[i][j] = 0;
		else d[i][j] = 1;
	}
	for (int j = 2; j <= w; j ++) Rep(i, h){
		if (d[i][j] == d[i - 1][j]) sd[i][j] = sd[i - 1][j] + 1;
		else sd[i][j] = 1;
	}
	int ans = h;
	Rep(i, h) {
		top = 0;
		st[0] = 1;
		for (int j = 2; j <= w; j ++) {
			while (top && sd[i][st[top]] >= sd[i][j])
				ans = max(ans, (j - st[top - 1]) * sd[i][st[top]]), top --;
			st[++ top] = j;
		}
		while (top) ans = max(ans, (w - st[top - 1] + 1) * sd[i][st[top]]), top --;
	}
	
	printf("%d\n", ans);
	
	return 0;
}
/*
3 3
..#
##.
.#.
*/
