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;
const int SIZE=1400;
int H,W;
int fld[SIZE][SIZE];


int solve(int *H){
    int L[SIZE],R[SIZE];

    stack<int>S;

    for(int i=0;i<W;i++){
        while(S.size()&&H[S.top()]>=H[i])S.pop();
        if(S.empty())L[i]=i;
        else L[i]=i-S.top()-1;
        S.push(i);
    }

    S=stack<int>();

    for(int i=W-1;i>=0;i--){
        while(S.size()&&H[S.top()]>=H[i])S.pop();
        if(S.empty())R[i]=W-i-1;
        else R[i]=S.top()-i-1;
        S.push(i);
    }
    //cout<<"H :";for(int i=0;i<W;i++)cout<<H[i]<<" ";cout<<endl;
    //cout<<"L :";for(int i=0;i<W;i++)cout<<L[i]<<" ";cout<<endl;
    //cout<<"R :";for(int i=0;i<W;i++)cout<<R[i]<<" ";cout<<endl;
    int ret=0;
    for(int i=0;i<W;i++)ret=max(ret,H[i]*(L[i]+R[i]+1));
    return ret;
}

int main(){
    cin>>H>>W;
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            cin>>fld[i][j];
            if(fld[i][j]==1){
                fld[i][j]=0;
            }
            else{
                fld[i][j]=(i?fld[i-1][j]:0)+1;
            }
        }
    }

    int ma=0;
    for(int i=0;i<H;i++)ma=max(ma,solve(fld[i]));

    cout<<ma<<endl;
    return 0;
}