#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 35 //const int N(35);
#define REP(i,n) for (int i=0;i<(n);i++)
struct bign
{
int len,s[N];
bign() { memset(s,0,sizeof(s)); len=1; }
bign(int num) { *this=num; }
bign(char *num) { *this=num; }
bign operator =(int num)
{
char c[N];
sprintf(c,"%d",num);
*this=c;
return *this;
}
bign operator =(const char *num)
{
len=strlen(num);
REP(i,len) s[i]=num[len-1-i]-'0';
return *this;
}
string str()
{
string res="";
REP(i,len) res=(char)(s[i]+'0')+res;
return res;
}
void clean()
{
while (len>1&&!s[len-1]) len--;
}
bign operator +(const bign &b)
{
bign c;
c.len=0;
for (int i=0,g=0;g||i<len||i<b.len;i++)
{
int x=g;
if (i<len) x+=s[i];
if (i<b.len) x+=b.s[i];
c.s[c.len++]=x%10;
g=x/10;
}
return c;
}
bign operator -(const bign &b)
{
bign c;
c.len=0;
int x;
for (int i=0,g=0;i<len;i++)
{
x=s[i]-g;
if (i<b.len) x-=b.s[i];
if (x>=0) g=0;
else{
x+=10;
g=1;
};
c.s[c.len++]=x;
}
c.clean();
return c;
}
bign operator *(const bign &b)
{
bign c;
c.len=len+b.len;
REP(i,len) REP(j,b.len) c.s[i+j]+=s[i]*b.s[j];
REP(i,c.len-1) { c.s[i+1]+=c.s[i]/10; c.s[i]%=10; }
c.clean();
return c;
}
bool operator <(const bign &b)
{
if (len!=b.len) return len<b.len;
for (int i=len-1;i>=0;i--)
if (s[i]!=b.s[i]) return s[i]<b.s[i];
return false;
}
bign operator +=(const bign &b)
{
*this=*this+b;
return *this;
}
bign operator -=(const bign &b)
{
*this=*this-b;
return *this;
}
};
//istream& operator >>(istream &in,bign &x)
//{
// string s;
// in>>s;
// x=s.c_str();
// return in;
//}
ostream& operator <<(ostream &out,bign &x)
{
out<<x.str();
return out;
}
bign p[81],f[81][81],ans(0);
int n,m,a[81][81];
void init()
{
//ifstream cin("game.in"); //freopen("game.in","r",stdin);
cin>>n>>m; //scanf("%d%d",&n,&m);
REP(i,n) REP(j,m) cin>>a[i][j]; //scanf("%d",&a[i][j]);
p[0]=1; REP(i,m) p[i+1]=p[i]*2;
}
int main()
{
init();
REP(t,n){
memset(f,0,sizeof(f));
for (int k=1;k<=m;k++)
for (int i=0;i<=k;i++)
{
if (i>0) f[k][i]=f[k-1][i-1]+p[k]*a[t][i-1];
if (i<k&&f[k][i]<f[k-1][i]+p[k]*a[t][m-(k-i)]) f[k][i]=f[k-1][i]+p[k]*a[t][m-(k-i)];
}
bign maxn;
for (int i=0;i<=m;i++)
if (maxn<f[m][i])
maxn=f[m][i];
ans+=maxn;
}
//ofstream cout("game.out");
cout<<ans<<endl;
//system("pause");
return 0;
}
/**************************************************************
Problem: 2274
User: admin
Language: C++
Result: Accepted
Time:645 ms
Memory:3040 kb
****************************************************************/