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;
using Int = long long;

template<typename T>
vector<T> make_v(size_t a){return vector<T>(a);}

template<typename T,typename... Ts>
auto make_v(size_t a,Ts... ts){
  return vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...));
}

template<typename T,typename V>
typename enable_if<is_class<T>::value==0>::type
fill_v(T &t,const V &v){t=v;}

template<typename T,typename V>
typename enable_if<is_class<T>::value!=0>::type
fill_v(T &t,const V &v){
  for(auto &e:t) fill_v(e,v);
}


template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}

Int calc(vector<Int> &v){
  Int n=v.size();
  Int res=0;
  using P = pair<Int, Int>;
  stack<P> sp;
  sp.emplace(-1,-1);
  for(Int i=0;i<n;i++){
    while(sp.top().second>=v[i]) sp.pop();
    chmax(res,(i-sp.top().first)*v[i]);
    sp.emplace(i,v[i]);
  }
  return res;
}

//INSERT ABOVE HERE
signed main(){
  Int h,w;
  cin>>h>>w;
  auto a=make_v<Int>(h,w);
  for(Int i=0;i<h;i++)
    for(Int j=0;j<w;j++)
      cin>>a[i][j];
  auto dp=make_v<Int>(h,w);
  fill_v(dp,0);
  for(Int i=0;i<h;i++){
    for(Int j=0;j<w;j++){
      if(a[i][j]) continue;
      dp[i][j]=(i?dp[i-1][j]:0)+1;
    }
  }
  Int ans=0;
  for(Int i=0;i<h;i++) chmax(ans,calc(dp[i]));
  cout<<ans<<endl;
  return 0;
}

