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<string>
#include<algorithm>
#include<cmath>
#include<vector>
#include<stack>
using namespace std;

struct Rect{
	int height;
	int pos;
};

int HistgramRectangle(vector<int> &hist){
	hist.push_back(0);
	int n=hist.size();
	stack<Rect> st;
	Rect tmp_rect, past_rect;
	int Max=0;

	for (int i=0;i<n;i++){
		tmp_rect.height=hist[i];
		tmp_rect.pos=i;

		if(st.empty()){
			st.push(tmp_rect);
		}else{
			if(st.top().height < hist[i]){
				st.push(tmp_rect);
			}else if(st.top().height > hist[i]){
				int stp = i;
				while(st.top().height >= hist[i] && !st.empty()){
					past_rect = st.top();
					st.pop();
					Max=max(Max, past_rect.height * (i-past_rect.pos));
					stp = past_rect.pos;
					if(st.empty()){
						break;
					}
				}
				tmp_rect.pos = stp;
				st.push(tmp_rect);
			}
		}
	}
	return Max;
}

int main(){
	int H,W,tmp,result=0;
	cin >> H >> W;
	vector<int> hist(W);

	for (int i=0;i<H;i++){
		for(int j=0;j<W;j++){
			cin >> tmp;
			if(tmp==1){
				hist[j] = 0; 
			}else{
				hist[j]+=1;
			}
		}
		result = max(HistgramRectangle(hist),result);
	}
	cout << result << endl;
	return 0;
}