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 rep(i, n) for(int i = 0; i < (n); i++)
using namespace std;
using ll = long long;
using P = pair<int, int>;

int get_largest_rec(const int w, int dp[]){
	stack<P> rs;
	int maxa = 0;
	dp[w] = 0;

	rep(i, w+1){
		P rect = make_pair(i, dp[i]);
		if(rs.empty()) rs.push(rect);
		else {
			if(rs.top().second < rect.second) rs.push(rect);
			else if(rs.top().second > rect.second) {
				int t = i;
				while(rs.size() && rs.top().second >= rect.second){
					P pre = rs.top(); rs.pop();
					int area = pre.second*(i - pre.first);
					maxa = max(maxa, area);
					t = pre.first;
				}
				rect.first = t;
				rs.push(rect);
			}
		}
	}
	return maxa;
}

int main(){
	int h, w; cin >> h >> w;
	bool t[h][w];
	rep(i, h)rep(j, w) {
		bool b; cin >> b;
		t[i][j] = b;
	}

	int dp[h+1][w+1];
	rep(j, w)rep(i, h){
		if(t[i][j]) dp[i][j] = 0;
		else dp[i][j] = (i > 0) ? dp[i-1][j] + 1 : 1;
	}

	int ans = 0;
	rep(i, h) ans = max(ans, get_largest_rec(w, dp[i]));

	cout << ans << endl;
	return 0;
}

