#include <bits/stdc++.h>
using namespace std;
#define ld long double
const int MAX = 2e5+5;
const int N = 401;
int dp[N][N][N];
void solve(){
int n,m; cin >> n >> m;
int mat[n][m];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> mat[i][j];
}
}
memset(dp,-1,sizeof(dp));
for (int i = 0; i < n; i++) {
vector<int> last(MAX,-1);
for (int j = i; j < n; j++) {
for (int k = 0; k < m; k++) {
if (last[mat[i][k]] >= k) {
last[mat[i][k]] = -1;
}
int pos = last[mat[i][k]];
last[mat[i][k]] = k;
if (i != j) {
if (last[mat[j][k]] > k) {
last[mat[j][k]] = -1;
}
pos = max(pos, last[mat[j][k]]);
last[mat[j][k]] = k;
}
if (k) {
pos = max(pos, dp[i][j][k-1]);
}
dp[i][j][k] = max(dp[i][j][k],pos);
}
}
}
int ans = 0;
for (int tam = 0; tam < n; ++tam) {
for (int i =0; i+tam < n; i++) {
for (int j = 0; j < m; j++) {
if (tam) {
dp[i][i+tam][j] = max({dp[i][i+tam][j], dp[i+1][i+tam][j], dp[i][i+tam-1][j]});
}
ans = max(ans, (tam+1) * (j-dp[i][i+tam][j]));
}
}
}
cout << ans << '\n';
}
signed main() {ios_base::sync_with_stdio(false); cin.tie(NULL);
int tt = 1;
//cin >> tt;
while(tt--){
solve();
}
}