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 <cstdio>
#include <algorithm>
#include <stack>

using namespace std;

#define maxa 1400+10

struct Rectangle {
	int height;
	int pos;
};

int we(int size, int buffer[]) {
	int i;
	stack<Rectangle> S;
	int maxv=0;
	buffer[size]=0;

	for(i=0; i<=size; i++) {
		Rectangle rect;
		rect.height=buffer[i];
		rect.pos=i;
		if(S.empty()) {
			S.push(rect);
		} else {
			if(S.top().height < rect.height) {
				S.push(rect);
			} else if(S.top().height > rect.height) {
				int target = i;
				while(!S.empty() && S.top().height > rect.height) {
					Rectangle pre = S.top();
					S.pop();
					int area = pre.height * (i - pre.pos);
					maxv=max(maxv, area);
					target = pre.pos;
				}
				rect.pos=target;
				S.push(rect);
			}
		}
	}
	return maxv;
}

int H,W;
int buffer[maxa][maxa];
int T[maxa][maxa];

int solve() {
	int i,j;

	for(j=0; j<W; j++)
		for(i=0; i<H; i++) {
			if(buffer[i][j]==1) T[i][j]=0;
			else {
				T[i][j]=(i>0) ? T[i-1][j]+1 : 1;
			}
		}

	int maxv=0;

	for(i=0; i<H; i++) {
		maxv=max(maxv,we(W,T[i]));
	}

	return maxv;
}

int main() {
	int i,j;

	scanf("%d %d",&H,&W);

	for(i=0; i<H; i++) {
		for(j=0; j<W; j++) {
			scanf("%d",&buffer[i][j]);
		}
	}

	printf("%d\n",solve());

	return 0;
}
