#include <bits/stdc++.h>

using namespace std;

const int maxn = 405;
const int maxval = 1e6;

int pos[maxn*maxn+5][maxn+5], dp[maxn+5][maxn+5], a[maxn+5][maxn+5];
vector<pair<int, int>> v[maxval+5];
int n, m;
void read() {
    cin >> m >> n;
    for (int i = 1; i<=m; ++i) {
        for (int j = 1; j<=n; ++j) cin >> a[i][j];
    }
}
void solve() {
    for (int i = 1; i <= m; ++i) {
        for (int j = 1; j <= n; ++j)
            v[a[i][j]].push_back({i, j}); //val.push_back
    }
    int cnt = 0;
    for (int i = 1; i < maxval; ++i) {
        for (auto p : v[i])
            a[p.first][p.second] = cnt;
        if (!v[i].empty()) ++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], pos[a[k][i]][i], pos[a[k][j]][j],
                           dp[i+1][j], dp[i][j-1]});

                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(0);
    cin.tie(0); cout.tie(0);
    read();
    solve();
    return 0;
}
