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<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define lol(i,n) for(int i=0;i<n;i++)
#define mod 1000000007;
typedef long long ll;
using namespace std;
#include<stack>
int BiggestRectangle(int N,int buf[]){
	buf[N]=0;
	stack<pair<int,int> >st;
	int ret=0;
	for(int i=0;i<=N;i++){
		if(st.empty())st.push(make_pair(buf[i],i));
		else if(st.top().first<buf[i])st.push(make_pair(buf[i],i));
		else if(st.top().first>buf[i]){
			int pnt=i;
			while(!st.empty()){
				int height=st.top().first;
				int index=st.top().second;
				if(height<buf[i])break;
				st.pop();
				ret=max(ret,height*(i-index));
				pnt=index;
			}
			st.push(make_pair(buf[i],pnt));
		}
	}
	return ret;
}
int dp[1410][1410];
int main(){
  int h,w;
  cin>>h>>w;
  lol(i,h){
    lol(j,w){
      int a;cin>>a;
      if(i==0)dp[i][j]=(a==0);
      else{
	if(a==0)dp[i][j]=dp[i-1][j]+1;
	else dp[i][j]=0;
      }
    }
  }
  int ans=0;
  lol(i,h){
    ans=max(ans,BiggestRectangle(w,dp[i]));
  }
  cout<<ans<<endl;
  return 0;
}