Given a matrix (H × W) which contains only 1 and 0, find the area of the largest rectangle which only contains 0s.

Constraints

* 1 ≤ H, W ≤ 1,400

Input


H W
c1,1 c1,2 ... c1,W
c2,1 c2,2 ... c2,W
:
cH,1 cH,2 ... cH,W


In the first line, two integers H and W separated by a space character are given. In the following H lines, ci,j, elements of the H × W matrix, are given.

Output

Print the area (the number of 0s) of the largest rectangle.

Example

Input

4 5
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
0 0 0 1 0


Output

6
#include <bits/stdc++.h>
using namespace std;
int n, c[1500][1500], dp[1500][1500], l[1500], r[1500], st[1500];
signed main(void) {
  int H, W;
  cin >> H >> W;
  for (long long i = (long long)0; i < (long long)H; ++i)
    for (long long j = (long long)0; j < (long long)W; ++j) cin >> c[i][j];
  for (long long i = (long long)0; i < (long long)W; ++i) {
    int cnt = 1;
    for (long long j = (long long)0; j < (long long)H; ++j) {
      if (!c[j][i]) {
        dp[j][i] = cnt;
        cnt++;
      } else {
        dp[j][i] = 0;
        cnt = 1;
      }
    }
  }
  long long ret = 0;
  for (long long j = (long long)0; j < (long long)H; ++j) {
    int t = 0;
    for (long long i = (long long)0; i < (long long)W; ++i) {
      while (t > 0 && dp[j][st[t - 1]] >= dp[j][i]) t--;
      l[i] = t == 0 ? 0 : (st[t - 1] + 1);
      st[t++] = i;
    }
    t = 0;
    for (int i = W - 1; i >= 0; --i) {
      while (t > 0 && dp[j][st[t - 1]] >= dp[j][i]) t--;
      r[i] = t == 0 ? n : st[t - 1];
      st[t++] = i;
    }
    for (long long i = (long long)0; i < (long long)W; ++i)
      ret = max(ret, (long long)dp[j][i] * (r[i] - l[i]));
  }
  cout << ret << endl;
  return 0;
}
