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>
#define syosu(x) fixed<<setprecision(x)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> P;
typedef pair<double,double> pdd;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<string> vs;
typedef vector<P> vp;
typedef vector<vp> vvp;
typedef vector<pll> vpll;
typedef pair<int,P> pip;
typedef vector<pip> vip;
const int inf=1<<30;
const ll INF=1ll<<60;
const double pi=acos(-1);
const double eps=1e-9;
const ll mod=1e9+7;
const int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};

int h,w;
vi b;

int main(){
	cin>>h>>w;
	b=vi(w+1);
	int res=0;
	for(int i=0;i<h;i++){
		stack<pip> st;
		st.push({-1,{-1,-1}});
		for(int j=0;j<=w;j++){
			if(j<w){
				int x;
				cin>>x;
				if(!x) b[j]++;
				else b[j]=0;
			}
			while(st.top().first>b[j]){
				pip p=st.top();st.pop();
//				cout<<p.second<<' '<<j<<' '<<p.first<<endl;
				res=max(res,(j-p.second.first)*p.first);
			}
//			cout<<j<<' '<<st.top().second.second+1<<endl;
			st.push({b[j],{st.top().second.second+1,j}});
		}
//		for(auto j:b) cout<<j<<' ';
//		cout<<endl;
//		cout<<res<<endl;
	}
	cout<<res<<endl;
}
