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 long long INF = (1ll << 60);
long long largestAreaHistogram(vector<long long> v) {
  long long N = v.size();
  stack<pair<long long, long long>> st;
  st.push({0, v[0]});
  long long ans = v[0];
  for (long long i = 1; i < N; i++) {
    while (st.size() && st.top().second > v[i]) {
      ans = max(ans, st.top().second * (i - st.top().first));
      st.pop();
    }
    if (st.empty())
      st.push({0, v[i]});
    else
      st.push({st.top().first + 1, v[i]});
  }
  while (st.size()) {
    ans = max(ans, st.top().second * (N - st.top().first));
    st.pop();
  }
  return ans;
}
int main() {
  long long H, W;
  cin >> H >> W;
  vector<vector<long long>> c(H, vector<long long>(W));
  for (long long h = 0; h < H; h++)
    for (long long w = 0; w < W; w++) cin >> c[h][w];
  vector<vector<long long>> dp(H, vector<long long>(W));
  for (long long w = 0; w < W; w++)
    if (c[0][w] == 0)
      dp[0][w] = 1;
    else
      dp[0][w] = 0;
  for (long long h = 1; h < H; h++)
    for (long long w = 0; w < W; w++)
      if (c[h][w] == 0)
        dp[h][w] = dp[h - 1][w] + 1;
      else
        dp[h][w] = 0;
  long long ans = 0;
  for (long long h = 0; h < H; h++) ans = max(ans, largestAreaHistogram(dp[h]));
  cout << ans << endl;
}
