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 <cmath>
#include <iomanip>
#include <stack>

using namespace std;


int c[1401][1401];
int dp[1401][1401];

struct RT {
	int point;
	int height;
};

int max_in_x(int *p,int size) {
	stack<RT> st;
	int cur = 0;
	int s = 0;

	*(p + size ) = 0;
	for (int i = 0; i <= size; i++) {
		int current_h = *(p + i);
		RT rect = {i,current_h};

		if (st.empty()) {
			st.push(rect);
		} else if (current_h > st.top().height) {
			st.push(rect);
		} else if (current_h < st.top().height) {
			RT start = st.top();
			start.point = i - 1;
			RT target;

			while(!st.empty() && st.top().height > current_h) {
			 	target = st.top();
				st.pop();
				s = max(s,(start.point -target.point + 1) * target.height);
				//cout << "s:" << s << endl;
			}
			target.height = current_h;
			st.push(target);
			
		} 
	}

	return s;
}


int main() {
	int W,H;
	cin >> H >> W;
	
	int v_max = 0;

	for (int y = 0; y < H; y++) {
		for (int x = 0; x < W; x++) {

			cin >> c[y][x];
			c[y][x] ^= 1;
			dp[y][x] = 0;			
		}
	}
	for (int x = 0; x < W; x++) {
		for (int y = 0; y < H; y++) {
			if (c[y][x] == 0) {
				dp[y][x] = 0;
				continue;
			}
			if (y==0) {
				dp[y][x] = 1;
				continue;				
			} 
			dp[y][x] = dp[y-1][x] + 1;
		}
	}

	int s_max = 0;

/*
	for (int y = 0; y < H; y++) {
		for (int x = 0; x < W; x++) {
			cout << setw(5) << dp[y][x] << " ";
		}
		cout << endl;
	}
*/

	for( int y = 0; y < H; y++) {
		
		//cout << "** s_max y:" << y << endl;
		int ret = max_in_x(dp[y],W); 
		//cout << "v:" << ret << endl;
		s_max = max(s_max,ret);
	}

	cout << s_max << endl;
	return 0;
}