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;
const int N = 5e2 + 10;
int main() {
  int n, m, a[N][N], now, ans, nx;
  pair<int, int> temp;
  stack<pair<int, int> > s;
  while (true) {
    scanf("%d%d", &n, &m);
    if (n == 0 && m == 0) return 0;
    ans = 0;
    for (int i = 0; i < n; i++) {
      now = 0;
      for (int j = 0; j < m; j++) {
        scanf("%d", &nx);
        if (nx == 1)
          now++;
        else
          now = 0;
        a[i][j] = now;
      }
    }
    for (int j = 0; j < m; j++) {
      while (!s.empty()) s.pop();
      for (int i = 0; i < n; i++) {
        while (!s.empty()) {
          if (s.top().first > a[i][j]) {
            temp = s.top();
            s.pop();
            if (s.empty())
              ans = max(ans, temp.first * i);
            else
              ans = max(ans, temp.first * (i - 1 - s.top().second));
          } else
            break;
        }
        s.push(make_pair(a[i][j], i));
      }
      while (!s.empty()) {
        temp = s.top();
        s.pop();
        if (s.empty())
          ans = max(ans, temp.first * n);
        else
          ans = max(ans, temp.first * (n - s.top().second - 1));
      }
    }
    printf("%d\n", ans);
  }
}
