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 <cmath>
#include <string>
#include <vector>
#include <utility>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <deque>
#include <algorithm>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef vector<int> vint;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
#define rep(i,n)	for(int i=0;i<n;i++)
#define srep(i,a,n)	for(int i=a;i<n;i++)
#define REP(i,n)	for(int i=0;i<=n;i++)
#define SREP(i,a,n)	for(int i=a;i<=n;i++)
#define rrep(i,n)	for(int i=n-1;i>=0;i--)
#define all(a)	(a).begin(),(a).end()
#define mp(a,b)	make_pair(a,b)
#define fst	first
#define scn second

const ll inf = (ll)1e18;
const ll mod = (ll)1e9 + 7;
const ld eps = 1e-9;

int main() {
	int h = 0, w = 0;	cin >> h >> w;
	vector<vint> a(h, vint(w, 0));
	rep(i, h)	rep(j, w)	cin >> a[i][j];
	vint depth(w, 0);
	rep(i, w)	depth[i] = a[0][i]^1;
	int ret = 0;
	int tmp = 0;
	rep(i, w) {
		if (a[0][i] == 0)	tmp++;
		else {
			ret = max(ret, tmp);
			tmp = 0;
		}
	}
	ret = max(ret, tmp);
	srep(i, 1, h) {
		//depth?????´??°
		rep(j, w) {
			if (a[i][j] == 0)	depth[j]++;
			else	depth[j] = 0;
		}
		//????????????(??????????????£??????????????????)??§?????§?????¢???????????????
		stack<pii> s;
		s.push(mp(0, 0));
		rep(j, w) {
			int to = j;
			while (!s.empty()&&s.top().fst >= depth[j]) {
				ret = max(ret, (j - s.top().scn)*s.top().fst);
				to = s.top().scn;
				s.pop();
			}
			s.push(mp(depth[j], to));
		}
		while (!s.empty()) {
			ret = max(ret, (w - s.top().scn)*s.top().fst);
			s.pop();
		}
	}
	cout << ret << endl;
	return 0;
}