← Home
#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();
    }
}