#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string add(string s1,string s2)
{
string ans="";
if(s2.size()<s1.size())while(s2.size()!=s1.size())s2="0"+s2;
if(s1.size()<s2.size())while(s1.size()!=s2.size())s1="0"+s1;
int a=0,b=0,c=0;
for(int p=s2.size()-1;p>=0;p--)
{
a=s1[p]-'0',b=s2[p]-'0';
ans=char(((a+b+c)%10)+'0')+ans;
c=(a+b+c)/10;
}
if(c==1)ans="1"+ans;
return ans;
}
int a[4100],b[4100],c[4100];
string mul(string s1,string s2)
{
memset(a,0,sizeof(a)),memset(b,0,sizeof(b)),memset(c,0,sizeof(c));
if(s1=="0"||s2=="0")return "0";
for(int p=1;p<=s1.size();p++)a[p]=int(s1[s1.size()-p]-'0');
for(int p=1;p<=s2.size();p++)b[p]=int(s2[s2.size()-p]-'0');
for(int p=1;p<=s2.size();p++)
for(int i=1;i<=s1.size();i++)
c[p+i-1]+=a[i]*b[p];
int len=s1.size()+s2.size();
for(int p=1;p<len;p++)
if(c[p]>9)
c[p+1]+=(c[p]/10),c[p]%=10;
while(len&&!c[len])len--;
string ans="";
for(int p=len;p>=1;p--)
ans=ans+char(c[p]+'0');
return ans;
}
string max(string x,string y)
{
int lx=x.size(),ly=y.size();
if(lx>ly)return x;
else if(ly>lx)return y;
else
{
for(int p=0;p<lx;p++)
if(x[p]>y[p])return x;
else return y;
}
}
string A[110][110],f[110][110];
int main()
{
int n,m;
string ans="0";
cin>>n>>m;
for(int p=1;p<=n;p++)
for(int i=1;i<=m;i++)
cin>>A[p][i];
for(int p=1;p<=n;p++)
{
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
f[i][j]="0";
for(int len=0;len<=m;len++)
for(int i=1;i+len<=m;i++)
f[i][i+len]=max(add(mul("2",f[i+1][i+len]),mul("2",A[p][i])),add(mul("2",f[i][i+len-1]),mul("2",A[p][i+len])));
ans=add(ans,f[1][m]);
}
cout<<ans<<endl;
}