#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 2e9;
bool used[5010][5010];
int add[5010];
char mine[5010];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  memset(used, 0, sizeof used);
  for (int i = 0; i < (n); i++) {
    scanf("%s", &mine);
    for (int j = 0; j < (m); j++) {
      if (mine[j] == '1') {
        used[j][i]++;
      }
    }
  }
  int out = 0;
  memset(add, 0, sizeof add);
  for (int j = 0; j < (m); j++) {
    vector<int> det;
    for (int i = 0; i < (n); i++) {
      if (used[j][i]) {
        det.push_back(i);
        add[j]++;
      }
    }
    out = max(out, add[j]);
    int sz = (int)(det).size() - 1;
    for (int k = j + 1; k < m; k++) {
      if (sz == -1) break;
      for (int q = 0; q < (sz + 1); q++) {
        if (used[k][det[q]]) {
          used[k][det[q]] = false;
          add[k]++;
        } else {
          swap(det[q], det[sz]);
          q--;
          sz--;
        }
      }
      if (sz == -1) break;
      out = max(out, (k - j + 1) * add[k]);
    }
  }
  cout << out;
}
