#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("dreptpal.in");
ofstream cout("dreptpal.out");
const int MAXN = 1000;
int a[1 + MAXN][1 + MAXN], pal[1 + MAXN][1 + MAXN], pi[1 + MAXN], length[1 + MAXN];
void Manacher(int n, int m) {
for (int i = 1; i <= n; i++) {
int l = 0, r = 0;
for (int j = 1; j <= m; j++) {
if (j <= r)
pal[i][j] = min(pal[i][2 * l - j], r - j);
while (j - pal[i][j] > 1 && j + pal[i][j] < m && a[i][j - pal[i][j] - 1] == a[i][j + pal[i][j] + 1])
pal[i][j]++;
if (j + pal[i][j] > r) {
r = j + pal[i][j];
l = j;
}
}
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
Manacher(n, m);
int answer = 0;
for (int j = 1; j <= m; j++) {
for (int i = 1; i <= n; i++) {
int k = i - 1;
while (k >= 1 && pal[k][j] >= pal[i][j])
k = pi[k];
pi[i] = k;
length[i] = i - k;
}
for (int i = n; i >= 1; i--) {
int k = i + 1;
while (k <= n && pal[k][j] >= pal[i][j])
k = pi[k];
pi[i] = k;
length[i] = length[i] + k - i;
}
for (int i = 1; i <= n; i++)
answer = max(answer, (length[i] - 1) * (2 * pal[i][j] + 1));
}
cout << answer << "\n";
return 0;
}