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>
class Stack {
 public:
  Stack(const int &max = 1400) : vector(max + 1), idx(max + 1), end{1}, sz{0} {
    vector.at(0) = 0;
  };
  void push(const int &factor) {
    vector.at(end) = factor;
    idx.at(end) = sz;
    ++end;
    ++sz;
  }
  void replace(const int &factor) {
    vector.at(end) = factor;
    ++end;
    ++sz;
  }
  int top() { return vector.at(end - 1); }
  int index() { return idx.at(end - 1); }
  int size() { return sz; }
  void pop() { --end; }
  void clear() {
    vector.at(0) = 0;
    end = 1;
    sz = 0;
  }

 private:
  std::vector<int> vector, idx;
  int end, sz;
};
int main() {
  int h, w;
  std::scanf("%d %d", &h, &w);
  std::vector<int> line(w, 0);
  Stack stack(w);
  int max = 0;
  for (auto i = 0; i < h; ++i) {
    for (auto j = 0; j < w; ++j) {
      int cell;
      std::scanf("%d", &cell);
      if (cell == 1) {
        line.at(j) = 0;
      } else {
        ++line.at(j);
      }
      if (stack.top() < line.at(j)) {
        stack.push(line.at(j));
      } else {
        while (stack.top() > line.at(j)) {
          if (stack.top() * (stack.size() - stack.index()) > max) {
            max = stack.top() * (stack.size() - stack.index());
          }
          stack.pop();
        }
        if (stack.top() != line.at(j)) {
          stack.replace(line.at(j));
        }
      }
    }
    while (stack.top() > 0) {
      if (stack.top() * (stack.size() - stack.index()) > max) {
        max = stack.top() * (stack.size() - stack.index());
      }
      stack.pop();
    }
    stack.clear();
  }
  std::printf("%d\n", max);
  return 0;
}
