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 main(){
  int h,w;
  char c;
  int mp[1410][1410]={0};
  int ans=0;

  cin>>h>>w;
  for(int i=1;i<=h;i++){
    for(int j=1;j<=w;j++){
      scanf(" %c",&c);
      if(c=='1')mp[i][j]=0;
      if(c=='0')mp[i][j]=mp[i-1][j]+1;
    }
  }

  int mx;
  int target;
  stack<pair<int,int> >st;
  for(int i=1;i<=h;i++){
    mx=0;
    
    for(int j=1;j<=w;j++){

      if(mx<mp[i][j]){
	st.push(make_pair(mp[i][j],j));
	mx=mp[i][j];
      }

      else if(mx>mp[i][j]){
	target = j;
	while(!st.empty()){
	  pair<int,int>f=st.top();
	  if(f.first<mp[i][j])break; // ...?
	  st.pop();
	  // Debug
	  /*
	  cout<<i<<" "<<j<<" "<<f.first<<" "<<f.second<<endl;
	  cout<<f.first*(j-f.second)<<endl;
	  */
	  ans = max(ans,(f.first*(j-f.second)));
	  target = f.second;
	}
	if(mp[i][j]>0)st.push(make_pair(mp[i][j],target));
	mx=mp[i][j];
      }

    }
    
    while(!st.empty()){
      pair<int,int>f=st.top();st.pop();
      // Debug
      //cout<<i<<"  "<<f.second<<endl;
      ans = max(ans,(f.first*(w+1-f.second)));
      //  cout<<ans<<endl;
    }
  }

  cout<<ans<<endl;
  return(0);
}