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;
const int num = 140;
struct Rectangle {
  int he, p;
};
inline int lr(int w, int bf[]) {
  bf[w] = 0;
  stack<Rectangle> s;
  int maxv = 0, area = 0;
  for (int i = 0; i <= w; i++) {
    Rectangle rect;
    rect.he = bf[i];
    rect.p = i;
    if (s.empty())
      s.push(rect);
    else if (s.top().he < rect.he)
      s.push(rect);
    else if (s.top().he > rect.he) {
      while (!s.empty() && s.top().he >= rect.he) {
        Rectangle pr = s.top();
        rect.p = pr.p;
        s.pop();
        area = (i - pr.p) * pr.he;
        maxv = max(area, maxv);
      }
      s.push(rect);
    }
  }
  return maxv;
}
int main() {
  int h, w, x;
  cin >> h >> w;
  int H[num][num], dp[num][num];
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> x;
      if (x) dp[i][j] = 0;
    }
  }
  for (int i = 0; i < w; i++) {
    for (int j = 0; j < h; j++) {
      if (!dp[j][i])
        H[j][i] = 0;
      else
        H[j][i] = (j > 0) ? H[j - 1][i] + 1 : 1;
    }
  }
  int maxv = 0;
  for (int i = 0; i < h; i++) {
    maxv = max(maxv, lr(w, H[i]));
  }
  cout << maxv << endl;
  return 0;
}
