#include <bits/stdc++.h>
using namespace std;
int a[405][405];
int n, m;
int r[405];
int ans = 0;
int nxt[405][405];
int nyt[405][405];
int bef[405 * 405];
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) scanf("%d", &a[i][j]);
  for (int i = 0; i < 405; i++)
    for (int j = 0; j < 405; j++) nxt[i][j] = m + 1, nyt[i][j] = 0;
  for (int up = n; up >= 1; up--) {
    for (int i = 0; i < 405 * 405; i++) bef[i] = m + 1;
    for (int i = m; i >= 1; i--) {
      int j = up;
      nxt[j][i] = min(nxt[j][i], bef[a[j][i]]);
      bef[a[up][i]] = min(bef[a[up][i]], i);
      for (j = up + 1; j <= n; j++) nxt[j][i] = min(nxt[j][i], bef[a[j][i]]);
    }
    for (int i = 0; i < 405 * 405; i++) bef[i] = 0;
    for (int i = 1; i <= m; i++) {
      int j = up;
      nyt[j][i] = max(nyt[j][i], bef[a[j][i]]);
      bef[a[up][i]] = max(bef[a[up][i]], i);
      for (j = up + 1; j <= n; j++) nyt[j][i] = max(nyt[j][i], bef[a[j][i]]);
    }
    for (int i = 1; i <= m + 1; i++) r[i] = m;
    for (int down = up; down <= n; down++) {
      for (int i = 1; i <= m; i++)
        r[i] = min(r[i], nxt[down][i] - 1),
        r[nyt[down][i]] = min(r[nyt[down][i]], i - 1);
      for (int i = m; i >= 1; i--) {
        r[i] = min(r[i], r[i + 1]);
        ans = max(ans, (down - up + 1) * (r[i] - i + 1));
      }
    }
  }
  cout << ans;
  return 0;
}
