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
import java.util.*;
public class Main {
	
	static int pos=0;
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int H=in.nextInt(),W=in.nextInt();
		int field[][]=new int[H][W],max=0;
		
		for(int i=0;i<H;i++) {
			for(int j=0;j<W;j++) {
				field[i][j]=Integer.parseInt(in.next())==1 ? 0 : 1;
				if(i>0 && field[i][j]>0)field[i][j]=field[i-1][j]+1;
			}
		}
		
		for(int i=0;i<H;i++) {
			Stack<Rect> stk=new Stack<>();
			for(int j=0;j<W;j++) {
				if(stk.isEmpty() || field[i][j]>stk.peek().h) {
					stk.push(new Rect(field[i][j],j));
				}
				else if(field[i][j]<stk.peek().h) {
					max=Math.max(max,createRect(stk,field[i][j],j));
					stk.push(new Rect(field[i][j],pos));
				}
			}
			max=Math.max(max, createRect(stk,0,W));
		}
		
		System.out.println(max);
	}
	
	static int createRect(Stack<Rect> stk,int h,int i) {
		int max=0;
		while(!stk.isEmpty()) {
			Rect crect=stk.peek();
			if(crect.h<h)break;
			
			max=Math.max(max, crect.h*(i-crect.i));
			pos=crect.i;
			stk.pop();
		}
		return max;
	}
	
}

class Rect{
	int h,i;
	Rect(int a,int b){
		h=a;i=b;
	}
}

