// ====================================
//   author: M_sea
//   website: https://m-sea-blog.com/
// ====================================
#include <bits/stdc++.h>
#define file(x) freopen(#x".in","r",stdin); freopen(#x".out","w",stdout)
#define debug(...) fprintf(stderr,__VA_ARGS__)
using namespace std;
typedef long long ll;

int read() {
	int X=0,w=1; char c=getchar();
	while (c<'0'||c>'9') { if (c=='-') w=-1; c=getchar(); }
	while (c>='0'&&c<='9') X=X*10+c-'0',c=getchar();
	return X*w;
}

const int N=2000+10;

int n,m;
char s[N][N];
int h[N][N],L[N],R[N],sta[N],top=0;

int main() {
	n=read(),m=read();
	for (int i=1;i<=n;++i) scanf("%s",s[i]+1);
	for (int i=1;i<n;++i)
		for (int j=1;j<m;++j) {
			int c=(s[i][j]=='#')+(s[i][j+1]=='#')+(s[i+1][j]=='#')+(s[i+1][j+1]=='#');
			if (c&1) h[i][j]=0;
			else h[i][j]=h[i-1][j]+1;
		}
	int ans=max(n,m);
	for (int i=1;i<n;++i) {
		sta[top=1]=0;
		for (int j=1;j<m;++j) {
			while (top&&h[i][sta[top]]>=h[i][j]) --top;
			L[j]=sta[top],sta[++top]=j;
		}
		sta[top=1]=m;
		for (int j=m-1;j;--j) {
			while (top&&h[i][sta[top]]>=h[i][j]) --top;
			R[j]=sta[top],sta[++top]=j;
		}
		for (int j=1;j<m;++j)
			ans=max(ans,(h[i][j]+1)*(R[j]-L[j]));
	}
	printf("%d\n",ans);
	return 0;
}