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;
class Rect {
 public:
  int h, idx;
  Rect(int h, int idx) : h(h), idx(idx) {}
};
int max_from_hist(vector<int> cols) {
  stack<Rect> s;
  int max_v = 0;
  cols[cols.size()] = 0;
  for (int i = 0; i <= cols.size(); i++) {
    Rect r(cols[i], i);
    if (s.empty() || s.top().h < cols[i]) {
      s.push(r);
    } else if (s.top().h > cols[i]) {
      int pos = i;
      while (!s.empty() && s.top().h >= r.h) {
        Rect pre = s.top();
        s.pop();
        int area = pre.h * (i - pre.idx);
        max_v = max(max_v, area);
        pos = pre.idx;
      }
      s.push(Rect(cols[i], pos));
    }
  }
  return max_v;
}
int main() {
  int h, w;
  cin >> h >> w;
  vector<vector<int> > T(h, vector<int>(w, 0));
  vector<vector<int> > A(h, vector<int>(w, 0));
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      cin >> T[i][j];
    }
  }
  for (int i = 0; i < h; i++) {
    for (int j = 0; j < w; j++) {
      if (T[i][j])
        A[i][j] = 0;
      else
        A[i][j] = (i ? A[i - 1][j] + 1 : 1);
    }
  }
  int max_v = 0;
  for (int i = 0; i < h; i++) max_v = max(max_v, max_from_hist(A[i]));
  cout << max_v << endl;
}
