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;
const int inf = 1 << 30;
const long long int infll = 1LL << 58;
const double EPS = 1e-9;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &vec) {
  os << "[";
  for (const auto &v : vec) {
    os << v << ",";
  }
  os << "]";
  return os;
}
void solve() {
  int h, w;
  static int c[1400][1400];
  cin >> h >> w;
  for (int i = (0); i < (h); ++i)
    for (int j = (0); j < (w); ++j) cin >> c[i][j];
  static int dp[1400][1400];
  for (int i = (0); i < (h); ++i)
    for (int j = (0); j < (w); ++j) {
      if (!c[i][j])
        dp[i][j] = 1;
      else
        dp[i][j] = 0;
    }
  int ans = 0;
  for (int i = (1); i < (h); ++i)
    for (int j = (1); j < (w); ++j) {
      if (c[i][j])
        dp[i][j] = 0;
      else {
        dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1;
        ans = max(ans, dp[i][j]);
      }
    }
  ans *= ans;
  cout << ans << endl;
}
int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  solve();
  return 0;
}
