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;
int c[1401][1401];
int dp[1401][1401];
struct RT {
  int point;
  int height;
};
int max_in_x(int *p, int size) {
  stack<RT> st;
  int cur = 0;
  int s = 0;
  *(p + size) = 0;
  for (int i = 0; i <= size; i++) {
    int current_h = *(p + i);
    RT rect = {i, current_h};
    if (st.empty()) {
      st.push(rect);
    } else if (current_h > st.top().height) {
      st.push(rect);
    } else if (current_h < st.top().height) {
      RT start = st.top();
      start.point = i - 1;
      RT target;
      while (!st.empty() && st.top().height > current_h) {
        target = st.top();
        st.pop();
        s = max(s, (start.point - target.point + 1) * target.height);
        cout << "s:" << s << endl;
      }
      target.height = current_h;
      st.push(target);
    }
  }
  return s;
}
int main() {
  int W, H;
  cin >> H >> W;
  int v_max = 0;
  for (int y = 0; y < H; y++) {
    for (int x = 0; x < W; x++) {
      cin >> c[y][x];
      c[y][x] ^= 1;
      dp[y][x] = 0;
    }
  }
  for (int x = 0; x < W; x++) {
    for (int y = 0; y < H; y++) {
      if (c[y][x] == 0) {
        dp[y][x] = 0;
        continue;
      }
      if (y == 0) {
        dp[y][x] = 1;
        continue;
      }
      dp[y][x] = dp[y - 1][x] + 1;
    }
  }
  int s_max = 0;
  for (int y = 0; y < H; y++) {
    int ret = max_in_x(dp[y], W);
    s_max = max(s_max, ret);
  }
  cout << s_max << endl;
  return 0;
}
