#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
char s[N][N];
int up[N][N][2][2], a[N][N], b[N], las[N], L[N], R[N];
int solve(int n) {
	vector<int> q;
	q.push_back(0);
	b[0] = b[n + 1] = 0;
	for (int i = 1; i <= n; ++ i) {
		while (b[q.back()] >= b[i]) q.pop_back();
		L[i] = q.back();
		q.push_back(i);
	}
	q.clear();
	q.push_back(n + 1);
	for (int i = n; i >= 1; -- i) {
		while (b[q.back()] >= b[i]) q.pop_back();
		R[i] = q.back();
		q.push_back(i);
	}
	int ans = 0;
	for (int i = 1; i <= n; ++ i) ans = max(ans, b[i] * (R[i] - L[i]));
	return ans;
}
int main() {
	int n, m;
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++ i) {
		scanf("%s", s[i] + 1);
		for (int j = 1; j <= m; ++ j) a[i][j] = s[i][j] == '#';
	}
	for (int i = 1; i <= n; ++ i) {
		for (int j = 2; j <= m; ++ j) {
			for (int x = 0; x < 2; ++ x) {
				for (int y = 0; y < 2; ++ y) {
					up[i][j][x][y] = (a[i][j] ^ x) != (a[i][j - 1] ^ y) ? 0 : up[i - 1][j][x][y] + 1;
				}
			}
		}
	}
	int ans = n;
	for (int i = 1; i <= n; ++ i) {
		for (int j = 2; j <= m; ++ j) {
			b[j - 1] = up[i - 1][j][a[i][j]][a[i][j - 1]] + 1;
		}
		ans = max(ans, solve(m - 1));
	}
	printf("%d\n", ans);
}

