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;

// http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=DPL_3_B

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);
  }
  while( !stk.empty() ) stk.pop();
  for(int i=n-1;i>=0;--i) {
    while( !stk.empty() && h[stk.top()] >= h[i] ) stk.pop();
    R[i] = (stk.empty()?n:stk.top());
    stk.push(i);
  }
  int maxi = 0;
  for(int i=0;i<n;++i) {
    maxi = max(maxi,h[i]*(R[i]-L[i]));
  }
  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;
}