#include <fstream>
#include <stack>
#define DIM 205
using namespace std;
ifstream fin("bmatrix.in");
ofstream fout("bmatrix.out");
int N,M,a[DIM][DIM],sol,sus[DIM],jos[DIM];
char s[DIM][DIM],b[DIM][DIM];
void solve_line(int x){
stack <pair <int ,int > > q;
for(int i=1;i<=M;i++){
if(q.empty() || a[x][i]>q.top().first)
q.push(make_pair(a[x][i],1));
else
if(q.top().first==a[x][i])
++q.top().second;
else{
int nr=0;
while(!q.empty() && a[x][i]<q.top().first){
nr+=q.top().second;
int lg=q.top().first;
q.pop();
sus[x]=max(sus[x],nr*lg);
jos[x-lg+1]=max(jos[x-lg+1],nr*lg);
}
q.push(make_pair(a[x][i],nr+1));
}
}
int nr=0;
while(!q.empty()){
nr+=q.top().second;
int lg=q.top().first;
q.pop();
sus[x]=max(sus[x],nr*lg);
jos[x-lg+1]=max(jos[x-lg+1],nr*lg);
}
}
void rotate(){
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
b[M-j+1][i]=s[i][j];
swap(N,M);
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
s[i][j]=b[i][j];
}
void solve(){
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++)
if(s[i][j]=='0')
a[i][j]=a[i-1][j]+1;
else
a[i][j]=0;
sus[i]=jos[i]=0;
solve_line(i);
}
for(int i=2;i<=N;i++)
sus[i]=max(sus[i],sus[i-1]);
for(int i=N-1;i>=1;i--)
jos[i]=max(jos[i],jos[i+1]);
for(int i=1;i<N;i++)
sol=max(sol,sus[i]+jos[i+1]);
}
int main(){
fin>>N>>M;
for(int i=1;i<=N;i++)
fin>>s[i]+1;
solve();
rotate();
solve();
fout<<sol;
fin.close();fout.close();
return 0;
}