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 N(1400+10);

int g[N][N];
int t[N][N];

#define f(i,n) for(i=0;i<n;i++)

struct AA{
    int h,pos;
};

int gget(int w,int b[]){
    stack<AA> s;
    int mm=0;
    b[w]=0;
    for(int i=0;i<=w;i++){
        AA r;
        r.h=b[i];
        r.pos=i;
        if(s.empty()){
            s.push(r);
        }else{
            if(s.top().h<r.h)
                s.push(r);
            else if(s.top().h>r.h){
                int tt=i;
                while(!s.empty()&&s.top().h>=r.h){
                    AA pre=s.top();s.pop();
                    int area=pre.h*(i-pre.pos);
                    mm=max(mm,area);
                    tt=pre.pos;
                }
                r.pos=tt;
                s.push(r);
            }
        }
    }
    return mm;
}


int main(){
    int h,w;
    cin>>h>>w;

    int i,j;
    f(i,h)f(j,w)
    cin>>g[i][j];

    f(i,h)f(j,w)
    if(g[i][j]==0)
    t[i][j]=(i>0)?t[i-1][j]+1:1;

    int mm=0;
    for(int i=0;i<h;i++)
    mm=max(mm,gget(w,t[i]));
    cout<<mm<<endl;
}



