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;
using UL = unsigned int;
using ULL = unsigned long long;
using LL = long long;
#define rep(i, n) for(UL i = 0; i < (n); i++)

struct Problem {

    UL SX[1401][1401] = {};

    void Solve() {
        UL H, W; scanf("%d%d", &H, &W);
        rep(y, H) rep(x, W) {
            UL c; scanf("%d", &c);
            if (c == 1) continue;
            SX[x + 1][y] = SX[x][y] + 1;
        }
        UL ans = 0;
        deque<pair<UL, UL>> Q;
        for (UL x = 1; x <= W; x++) {
            Q.push_back({ 0,0 });
            for (UL y = 0; y <= H; y++) {
                UL p = y;
                while (Q.back().first > SX[x][y]) {
                    ans = max(ans, Q.back().first * (y - Q.back().second));
                    p = Q.back().second;
                    Q.pop_back();
                }
                Q.push_back({ SX[x][y], p });
            }
        }
        printf("%d\n", ans);
    }
};
int main() {
    unique_ptr<Problem> p(new Problem());
    p->Solve();
    return 0;
}

