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 Rec {
 public:
  int x, y;
  Rec() {}
  Rec(int x, int y) : x(x), y(y) {}
  int area() { return x * y; }
};
Rec dp[1430][1430];
int check_x(int y, int from, int length) {
  for (int i = from; i > from + length; i--) {
    if (dp[y][i].area() == 0) return 0;
  }
  return 1;
}
int check_y(int x, int from, int length) {
  for (int i = from; i > from + length; i--) {
    if (dp[i][x].area() == 0) return 0;
  }
  return 1;
}
int main() {
  int H, W;
  cin >> H >> W;
  for (int h = (0); h < (H); ++h) {
    for (int w = (0); w < (W); ++w) {
      int in;
      cin >> in;
      if (in) {
        dp[h][w] = Rec(0, 0);
      } else {
        dp[h][w] = Rec(1, 1);
      }
    }
  }
  for (int h = 1; h < H; h++) {
    for (int w = 1; w < W; w++) {
      if (dp[h][w].x == 0 && dp[h][w].y == 0) continue;
      if (dp[h - 1][w].x * (dp[h - 1][w].y + 1) > dp[h][w].area() &&
          check_x(h, w, dp[h - 1][w].x)) {
        dp[h][w].x = dp[h - 1][w].x;
        dp[h][w].y = dp[h - 1][w].y + 1;
      }
      if ((dp[h][w - 1].x + 1) * dp[h][w - 1].y > dp[h][w].area() &&
          check_y(w, h, dp[h][w - 1].y)) {
        dp[h][w].x = dp[h][w - 1].x + 1;
        dp[h][w].y = dp[h][w - 1].y;
      }
      if ((dp[h - 1][w - 1].x + 1) * (dp[h - 1][w - 1].y + 1) >
              dp[h][w].area() &&
          check_x(h, w, dp[h - 1][w].x) && check_y(w, h, dp[h][w - 1].y)) {
        dp[h][w].x = dp[h - 1][w - 1].x + 1;
        dp[h][w].y = dp[h - 1][w - 1].y + 1;
      }
    }
  }
  int mx = -1;
  for (int h = (0); h < (H); ++h) {
    for (int w = (0); w < (W); ++w) {
      mx = max(mx, dp[h][w].area());
    }
  }
  cout << mx << endl;
  return 0;
}
