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;

long long h, w;
vector<vector<long long>> c;

long long solve();
long long calc(vector<long long>& a);

int main() {
  cin >> h >> w;
  c.assign(h, vector<long long>(w, 0));
  for (int i = 0; i < h; ++i)
    for (int j = 0; j < w; ++j) {
      cin >> c[i][j];
      c[i][j] = 1 - c[i][j];
      if (i != 0 && c[i][j]) c[i][j] += c[i - 1][j];
    }
  cout << solve() << endl;
  return 0;
}

long long solve() {
  long long res = 0;
  for (int i = 0; i < h; ++i) res = max(res, calc(c[i]));
  return res;
}

long long calc(vector<long long>& a) {
  stack<long long> len, id;
  len.push(0);
  a.push_back(0);
  long long res = 0, n = a.size();
  for (int i = 0; i < n; ++i) {
    int nextid = i;
    while (a[i] < len.top()) {
      nextid = id.top();
      res = max(res, len.top() * (i - id.top()));
      len.pop();
      id.pop();
    }
    if (a[i] > len.top()) {
      len.push(a[i]);
      id.push(nextid);
    }
  }
  return res;
}
