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;
  scanf("%d%d", &n, &m);
  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);
}
