#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <memory.h>
#include <bitset>

using namespace std;
typedef long long LL;
const int maxn = 2005;
char g[maxn][maxn];int n,m,ans;
int e[maxn][maxn],p[maxn][maxn];
int l[maxn],r[maxn],a[maxn],cov[maxn],ord[maxn];

bool comp(int x,int y) {return a[x]>a[y];}
int main()
{
	#ifdef Amberframe
		freopen("arc081f.in","r",stdin);
		freopen("arc081f.out","w",stdout);
	#endif
	scanf("%d %d",&n,&m);ans=max(n,m);
	for (int i=1;i<=n;i++) scanf("%s",g[i]+1);
	for (int i=2;i<=n;i++) ord[i]=i;
	for (int i=2;i<=n;i++)
	for (int j=2;j<=m;j++)
		e[i][j]=(g[i][j]^g[i][j-1]^g[i-1][j]^g[i-1][j-1])==0;
	for (int i=2;i<=n;i++)
	for (int j=m;j>=2;j--)
		p[i][j]=e[i][j]?p[i][j+1]+1:0;
	
	for (int j=2;j<=m;j++)
	{
		for (int i=2;i<=n;i++)
			cov[i]=0,l[i]=r[i]=0,a[i]=p[i][j];
		sort(ord+2,ord+n+1,comp);
		
		for (int i=2;i<=n;i++)
		{
			int x=ord[i],L=x,R=x;cov[x]=true;
			if (cov[x-1]) L=l[x-1];
			if (cov[x+1]) R=r[x+1];
			r[L]=R;l[R]=L;ans=max(ans,(a[x]+1)*(R-L+2));
		}
	}
	printf("%d",ans);
	return 0;
}