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 <stdio.h>
#include <stack>
#include <utility>
using namespace std;
typedef pair<int,int> pi;
#define F first
#define S second
#define MP make_pair
const int N=5e2+10;
int main(){
    int n,m,a[N][N],now,ans,nx;
    pi temp;
    stack<pi> s;
    while(true){
        scanf("%d%d",&n,&m);
        if(n==0&&m==0)return 0;
        ans=0;
        for(int i=0;i<n;i++){
            scanf("%s",c);
            now=0;
            for(int j=0;j<m;j++){
                scanf("%d",&nx);
                if(nx==1)now++;
                else now=0;
                a[i][j]=now;
            }
        }
        for(int j=0;j<m;j++){
            while(!s.empty())s.pop();
            for(int i=0;i<n;i++){
                while(!s.empty()){
                    if(s.top().F>a[i][j]){
                        temp=s.top();
                        s.pop();
                        if(s.empty())ans=max(ans,temp.F*i);
                        else ans=max(ans,temp.F*(i-1-s.top().S));
                    }
                    else break;
                }
                s.push(MP(a[i][j],i));
            }
            while(!s.empty()){
                temp=s.top();
                s.pop();
                if(s.empty())ans=max(ans,temp.F*n);
                else ans=max(ans,temp.F*(n-s.top().S-1));
                
            }
        }
        printf("%d\n",ans);
    }
}
