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
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for(int i = 0; i < (int)(n); ++i)
#define all(x) x.begin(),x.end()
#define ln '\n'
const double PI = acos(-1.0);
const long long MOD = 1000000007LL;
//const long long MOD = 998244353LL;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<long long, long long> pll;
template<class T> inline bool chmax(T &a, T b) { if (a < b) { a = b; return true;} return false; }
template<class T> inline bool chmin(T &a, T b) { if (a > b) { a = b; return true;} return false; }
///////////////////////////////////////////////////////////////////////////////////////////////////

int main() {
    ios::sync_with_stdio(false); cin.tie(nullptr);
    int H,W; cin >> H >> W;
    vector<vector<int>> S(H, vector<int>(W));
    rep(i,H) rep(j,W) cin >> S[i][j];

    vector<vector<int>> A(H, vector<int>(W));
    rep(i,H) {
        rep(j,W) {
            if (i) {
                if (S[i][j]) A[i][j] = 0;
                else A[i][j] = A[i-1][j]+1;
            } else {
                A[i][j] = 1-S[i][j];
            }
        }
    } 

    int ans = 0;
    rep(i,H) {
        stack<pii> sta;
        sta.emplace(0,-1);
        rep(j,W) {
            int w = j;
            while (sta.top().first > A[i][j]) {
                int h,left;
                tie(h,left) = sta.top(); sta.pop();
                chmax(ans, h*(j - left));
                w = left;
            }
            if (sta.top().first < A[i][j]) {
                sta.emplace(A[i][j],w);
            }
        }
        while (!sta.empty()) {
            int h,left;
            tie(h,left) = sta.top(); sta.pop();
            chmax(ans, h*(W - left));
        }
    }

    cout << ans << ln;
}
