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>
const double PI = 3.14159265358979323846;
const double esp = 1e-9;
const int infi = (int)1e+9 + 10;
const long long infll = (long long)1e+18 + 10;
int h, w, ans = 0;
int map[1401][1401];
int main() {
  std::cin >> h >> w;
  for (int i = 0; i < h; ++i) {
    for (int j = 0; j < w; ++j)
      std::cin >> map[i][j], map[i][j] = (1 - map[i][j]);
  }
  for (int i = 0; i < w; ++i) {
    for (int j = 1; j < h; ++j)
      map[j][i] = (map[j][i] == 0 ? 0 : map[j - 1][i] + 1);
  }
  for (int i = 0; i < h; ++i) {
    int max = 0;
    std::stack<std::pair<int, int> > s;
    for (int j = 0; j < w; ++j) {
      while (s.size() && s.top().first > map[i][j]) {
        max = std::max(max, s.top().first * (j - s.top().second));
        s.pop();
      }
      s.push(std::pair<int, int>(map[i][j], j));
    }
    while (s.size()) {
      max = std::max(max, s.top().first * (w - s.top().second));
      s.pop();
    }
    ans = std::max(max, ans);
  }
  std::cout << ans << std::endl;
  return 0;
}
