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 <iostream>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;


int main(){
    int W,H;
    cin>>H>>W;
    int dp[H][W];
    for(int i=0;i<H;i++){
        for(int j=0;j<W;j++){
            int tile;
            if(cin>>tile,tile==0){
                dp[i][j]=(j?dp[i][j-1]:0)+1;
            }else{
                dp[i][j]=0;
            }
        }
    }
    int ans=0;
    typedef pair<int,int> P;
    stack<P,vector<P>> S;
    for(int j=0;j<W;j++){
        for(int i=0;i<H;i++){
            if(S.empty()){
                S.emplace(dp[i][j],i);
                continue;
            }
            P p = S.top();
            if(p.first==dp[i][j]){
                continue;
            }
            if(p.first<dp[i][j]){
                S.emplace(dp[i][j],i);
                continue;
            }
            while(!S.empty()){
                ans=max(ans,p.first*(i-p.second));
                S.pop();
                if(S.empty()){
                    S.emplace(dp[i][j],p.second);
                    break;
                }
                if(S.top().first>=dp[i][j]){
                    p=S.top();
                    continue;
                }else{
                    S.emplace(dp[i][j],p.second);
                    break;
                }
            }
        }
        while(!S.empty()){
            P p = S.top(); S.pop();
            ans=max(ans,p.first*(H-p.second));
        }
    }
    cout<<ans<<endl;
}