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;
template <typename T>
void chmax(T &a, T b) {
  a = max(a, b);
}
template <typename T>
void chmin(T &a, T b) {
  a = min(a, b);
}
template <typename T>
void chadd(T &a, T b) {
  a = a + b;
}
long long int dx[] = {0, 0, 1, -1};
long long int dy[] = {1, -1, 0, 0};
constexpr long long INF = 1001001001001001LL;
constexpr long long MOD = 1000000007LL;
long long int H, W;
long long int histArea(vector<long long int> h) {
  long long int N = h.size();
  h.push_back(0);
  N++;
  long long int ans = 0;
  stack<pair<long long int, long long int> > S;
  for (long long int(i) = (0); (i) < (N + 1); (i)++) {
    if (S.empty()) S.push(pair<long long int, long long int>(h[i], i));
    if (S.top().first < h[i])
      S.push(pair<long long int, long long int>(h[i], i));
    else if (S.top().first > h[i]) {
      long long int lastpos = 0;
      while (!S.empty() && S.top().first >= h[i]) {
        lastpos = S.top().second;
        chmax(ans, S.top().first * (i - lastpos));
        S.pop();
      }
      S.push(pair<long long int, long long int>(h[i], lastpos));
    }
  }
  return ans;
}
long long int maxRectangle(vector<vector<long long int> > board) {
  long long int H = board.size(), W = board[0].size();
  vector<vector<long long int> > sum(H, vector<long long int>(W));
  for (long long int(i) = (0); (i) < (H); (i)++)
    for (long long int(j) = (0); (j) < (W); (j)++) {
      if (board[i][j] == 1) continue;
      if (i > 0) sum[i][j] = sum[i - 1][j] + 1;
    }
  long long int ret = 0;
  for (long long int(i) = (0); (i) < (H); (i)++) chmax(ret, histArea(sum[i]));
  return ret;
}
signed main() {
  cin >> H >> W;
  vector<vector<long long int> > board(H, vector<long long int>(W));
  for (long long int(i) = (0); (i) < (H); (i)++)
    for (long long int(j) = (0); (j) < (W); (j)++) cin >> board[i][j];
  cout << maxRectangle(board) << endl;
  return 0;
}
