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;
typedef long long ll;
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb emplace_back
#define INF (1e9+1)
//#define INF (1LL<<59)

struct st{int left,height;};
int solveMaxRectangle(vector<int> v){
	v.pb(0);
	int maxi = 0;
	stack<st> stk;
	rep(i,v.size()){
		int left = i;
		while( stk.size()>0 && stk.top().height>=v[i] ){
			int w = i - stk.top().left;
			maxi = max(maxi,w*stk.top().height);
			left = stk.top().left;
			stk.pop();
		}
		stk.push(st{left,v[i]});
	}
	return maxi;
}


int main(){
	int h,w;
	cin>>h>>w;
	
	vector<vector<int>> v(h,vector<int>(w));
	rep(i,h) rep(j,w) cin>>v[i][j];
	rep(i,h) rep(j,w) v[i][j] = !v[i][j];
	
	static int dp[1500][1500];
	rep(i,1500)rep(j,1500)dp[i][j]=0;
	
	rep(i,w)dp[0][i] = v[0][i];
	for(int i=1;i<h;i++){
		rep(j,w){
			if(v[i][j]!=0)dp[i][j] = dp[i-1][j]+v[i][j];
		}
	}
 
	int ans = 0;
	rep(i,h){
		vector<int> v(dp[i],dp[i]+1500);
		ans = max(ans,solveMaxRectangle(v));
	}
	cout<<ans<<endl;
}