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;

struct Rectangle{
    int height,pos;
};

int h,w;
vector<vector<int>> T(1401,vector<int>(1401));
vector<vector<int>> buffer(1401,vector<int>(1401));

int getLargestRectangle(int size,vector<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 getLargestRectangle(){
    for(int j=0;j<w;j++){
        for(int i=0;i<h;i++){
            if(buffer[i][j]){
                T[i][j]=0;
            }
            else{
                if(i==0){
                    T[i][j]=1;
                }
                else{
                    T[i][j]=T[i-1][j]+1;
                }
            }
        }
    }
    int maxv=0;
    for(int i=0;i<h;i++){
        maxv=max(maxv,getLargestRectangle(w,T[i]));
    }
    return maxv;
}

int main(){
    cin>>h>>w;
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            cin>>buffer[i][j];
        }
    }

    cout<<getLargestRectangle()<<endl;
}
