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;

template<class T> long long largest_rectangle (vector<T> a) {
    a.emplace_back(0);
    int n = a.size(); T ret = 0;
    stack<pair<T, int>> sta;
    for (int i = 0; i < n; i++) {
        if (sta.empty()) sta.emplace(a[i], i);
        else if (sta.top().first < a[i]) sta.emplace(a[i], i);
        else if (sta.top().first > a[i]) {
            int idx = i;
            while (!sta.empty()) {
                if (sta.top().first < a[i]) break;
                T h; int t; tie(h, t) = sta.top(); sta.pop();
                T s = h * (i - t); idx = t;
                if (ret < s) ret = s;
            }
            sta.emplace(a[i], idx);
        }
    }
    return ret;
}



int main() {
    int h, w, ans = 0;
    cin >> h >> w;
    vector<vector<int>> s(h, vector<int>(w));
    vector<vector<int>> d(h+1, vector<int>(w, 0));
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            cin >> s[i][j];
        }
    }
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            if (s[i][j] == 1) d[i+1][j] = 0;
            else d[i+1][j] = d[i][j] + 1;
        }
    }
    
    for (int i = 0; i <= h; i++) {
        int res = largest_rectangle(d[i]);
        if (ans < res) ans = res;
    }
    
    cout << ans << endl;
    return 0;
}
