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;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n)   FOR(i,0,n)
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef pair<int,int> pint;

struct rect{int ht;int pos;};
int tb[1400][1400];
int area_rect(int size,int buf[]){
    stack<rect> st;
    int mx=0;
    buf[size]=0;
    rep(i,size+1){
        rect r;
        r.ht=buf[i];
        r.pos=i;
        if(st.empty()) st.push(r);
        else{
            if(st.top().ht<r.ht) st.push(r);
            else if (st.top().ht>r.ht){
                int ti=i;
                while(!st.empty()&&st.top().ht>=r.ht){
                    rect pre=st.top();st.pop();
                    int area=pre.ht*(i-pre.pos);
                    mx=max(mx,area);
                    ti=pre.pos;
                }
                r.pos = ti;
                st.push(r);
            }
        }
    }
    return mx;
}
int main(){
    int h,w;
    cin>>h>>w;
    rep(i,h){
        rep(j,w){
            bool x;
            cin>>x;
            if(i==0||x==1) tb[i][j]=!x;
            else tb[i][j]=tb[i-1][j]+!x;
        }
    }
    int mx=0;
    rep(i,h) mx=max(mx,area_rect(w,tb[i]));
    cout<<mx<<endl;
    return 0;
}