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[1410][1410];
int dp[1410];

int main(void) {
  int h, w;
  cin >> h >> w;

  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> c[i][j];
    }
  }

  int ans = 0;
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (!i) {
        dp[j] = c[i][j] ? 0 : 1;
      } else {
        dp[j] = c[i][j] ? 0 : dp[j] + 1;
      }
    }

    vector<int> L(w), R(w);
    stack<int> st;
    for (int j = 0; j < w; j++) {
      while (!st.empty() && dp[st.top()] >= dp[j]) st.pop();
      L[j] = st.empty() ? 0 : st.top() + 1;
      st.push(j);
    }
    while (!st.empty()) st.pop();
    for (int j = w - 1; j >= 0; j--) {
      while (!st.empty() && dp[st.top()] >= dp[j]) st.pop();
      R[j] = st.empty() ? w : st.top();
      st.push(j);
    }

    for (int j = 0; j < w; j++) {
      ans = max(ans, dp[j] * (R[j] - L[j]));
    }
  }
  cout << ans << endl;

  return 0;
}
