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 LargestRectangleInAHistogram(vector<int> h) {
  assert(h.size());
  stack<int> stk;
  int n = (int)h.size();
  vector<int> L(n), R(n);
  for (int i = 0; i < n; ++i) {
    while (!stk.empty() && h[stk.top()] >= h[i]) stk.pop();
    L[i] = (stk.empty() ? 0 : stk.top() + 1);
    stk.push(i);
  }
  for (int i = n - 1; i >= 0; --i) {
    while (!stk.empty() && h[stk.top()] >= h[i]) stk.pop();
    R[i] = (stk.empty() ? n - 1 : stk.top() - 1);
    stk.push(i);
  }
  int maxi = 0;
  for (int i = 0; i < n; ++i) {
    maxi = max(maxi, h[i] * (R[i] - L[i] + 1));
  }
  return maxi;
}
int LargestRectangle(int H, int W, vector<vector<int> > c) {
  vector<vector<int> > hs(H, vector<int>(W, 0));
  for (int i = 0; i < H; ++i) {
    for (int j = 0; j < W; ++j) {
      if (c[i][j]) continue;
      hs[i][j] = ((i - 1 >= 0) ? hs[i - 1][j] : 0) + 1;
    }
  }
  int maxi = 0;
  for (int i = 0; i < H; ++i) {
    vector<int> h(W);
    for (int j = 0; j < W; ++j) {
      h[j] = hs[i][j];
    }
    maxi = max(maxi, LargestRectangleInAHistogram(h));
  }
  return maxi;
}
int main() {
  int H, W;
  cin >> H >> W;
  vector<vector<int> > c(H, vector<int>(W));
  for (int i = 0; i < H; ++i)
    for (int j = 0; j < W; ++j) cin >> c[i][j];
  cout << LargestRectangle(H, W, c) << endl;
  return 0;
}
