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 maxn=1400;

struct rectangle{
    int height,pos;
};

int getmaxv(int size,int buffer[])
{
    stack<rectangle>S;
    int maxv=0;
    buffer[size]=0;
    for(int i=0;i<=size;i++){
        rectangle rect;
        rect.height=buffer[i];
        rect.pos=i;
        if(S.empty()){
            S.push(rect);
        }else{
            if(S.top().height<rect.height){
                S.push(rect);
            }else if(S.top().height>rect.height){
                int target=i;
                while(!S.empty()&&S.top().height>=rect.height){
                    rectangle pre=S.top();
                    S.pop();
                    int area=pre.height*(i-pre.pos);
                    maxv=max(maxv,area);
                    target=pre.pos;
                }
                rect.pos=target;
                S.push(rect);
            }
        }
    }
    return maxv;
}

int h,w;
int buffer[maxn][maxn];
int t[maxn][maxn];

int solve()
{
    for(int j=0;j<w;j++){
        for(int i=0;i<h;i++){
            if(buffer[i][j]){
                t[i][j]=0;
            }else{
                t[i][j]=(i>0)?t[i-1][j]+1:1;
            }
        }
    }
//    for(int i=0;i<h;i++){
//        for(int j=0;j<w;j++){
//            cout<<t[i][j]<<" ";
//        }
//        cout<<endl;
//    }
    int maxv=0;
    for(int i=0;i<h;i++){
        maxv=max(maxv,getmaxv(w,t[i]));
    }
    return maxv;
}

int main()
{
    scanf("%d%d",&h,&w);
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            scanf("%d",&buffer[i][j]);
        }
    }
    cout<<solve()<<endl;
    return 0;
}

