#include <bits/stdc++.h>
using namespace std;
const int maxn = 400;
const int maxval = 1e6;
int a[maxn+5][maxn+5], m, n, pos[maxn*maxn+5][maxn+5], dp[maxn+5][maxn+5];
vector <pair<int, int>> v[maxval+5];
void read() {
    cin >> m >> n;
    for (int i = 1; i<=m; ++i) {
        for (int j = 1; j<=n; ++j) {
            cin >> a[i][j];
            v[a[i][j]].push_back({i, j});
        }
    }
}
void solve() {
    int cnt = 0;
    for (int i = 1; i<=maxval; ++i) {
        if (!v[i].empty()) {
            for (auto p : v[i]) {
                a[p.first][p.second] = cnt;
            }
            ++cnt;
        }
    }
    int ans = 0;
    for (int k = 1; k<=m; ++k) {
        for (int i = n; i>=1; --i) {
            for (int j = i; j<=n; ++j) {
                dp[i][j] = max({dp[i][j], dp[i+1][j], dp[i][j-1], pos[a[k][i]][i], pos[a[k][j]][j]});
                if (i < j) {
                    dp[i][j] = max({dp[i][j], pos[a[k][i]][j], pos[a[k][j]][i]});
                    if (a[k][i] == a[k][j]) dp[i][j] = k;
                }
                ans = max(ans, (j-i+1) * (k - dp[i][j]));
            }
        }
        for (int i = 1; i<=n; ++i) {
            pos[a[k][i]][i] = k;
        }
    }
    cout << ans;
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    read();
    solve();
    return 0;
}
