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,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
//---------------------------------------------------------------------------------------------------
typedef long long ll;
ll maxRectangleInHistogram(vector<int> &v) {
    int n = v.size();
    stack<int> s;
    vector<int> L(n), R(n);
    rep(i, 0, n) {
        while (s.size() && v[s.top()] >= v[i]) s.pop();
        L[i] = s.size() ? (s.top() + 1) : 0;
        s.push(i);
    }
    while (s.size()) s.pop();
    rrep(i, n - 1, 0) {
        while (s.size() > 0 && v[s.top()] >= v[i]) s.pop();
        R[i] = s.size() ? s.top() : n;
        s.push(i);
    }
    ll res = 0;
    rep(i, 0, n) res = max(res, 1LL * v[i] * (R[i] - L[i]));
    return res;
}
ll maxRectangle(vector<vector<int>> &v) { // 0:can't use, 1:can use
    int h = v.size();
    int w = v[0].size();

    ll res = 0;
    vector<int> vv(w, 0);
    rep(y, 0, h) {
        rep(x, 0, w) {
            if (v[y][x]) vv[x]++;
            else vv[x] = 0;
        }
        res = max(res, maxRectangleInHistogram(vv));
    }
    return res;
}
/*---------------------------------------------------------------------------------------------------
????????????????????????????????? ??§?????§  
??????????????? ??§?????§ ???????´<_??? ?????? Welcome to My Coding Space!
???????????? ??? ?´_???`??????/??? ???i     
?????????????????????????????? ???  |???|     
????????? /?????? /??£??£??£??£/??????|  
??? ???_(__??????/???    ???/ .| .|????????????  
??? ????????????/????????????/??????u??????  
---------------------------------------------------------------------------------------------------*/










int H, W, C[2020][2020];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> H >> W;
    rep(y, 0, H) rep(x, 0, W) cin >> C[y][x];

    vector<vector<int>> v(H, vector<int>(W, 0));
    rep(y, 0, H) rep(x, 0, W) v[y][x] = 1 - C[y][x];
    cout << maxRectangle(v) << endl;
}