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;
int main()
{
	int h, w, mx = 0;
	scanf("%d %d", &h, &w);
	vector<vector<int>> a(h, vector<int>(w));
	for(int i = 0; i < h; ++i)
	{
		for (int j = 0, k; j < w; ++j)
		{
			scanf("%d", &k);
			a[i][j] = !k;
		}
	}
	for(int i = 1; i < h; ++i)
	{
		for(int j = 0; j < w; ++j)
		{
			if(a[i][j])
			{
				a[i][j] += a[i - 1][j];
			}
		}
	}
	for(int i = 0; i < h; ++i)
	{
		stack<pair<int, int>> s;
		for(int j = 0, hor = 0; j < w; hor = ++j)
		{
			for(int t, u; !s.empty(); )
			{
				t = s.top().first;
				u = s.top().second;
				if(t >= a[i][j])
				{
					mx = max(mx, t * (j - u));
					hor = min(hor, u);
					s.pop();
				}
				else
				{
					break;
				}
			}
			s.push(make_pair(a[i][j], hor));
		}
		for(; !s.empty(); mx = max(mx, s.top().first * (w - s.top().second)), s.pop());
	}
	printf("%d\n", mx);
}

