const maxw=35;
type gjd=array[1..maxw]of longint;
var a:array[1..81,1..81]of integer;
n,m,i,j:integer;
ans:gjd;
dp:array[1..81,1..81]of gjd;
c2:array[0..80]of gjd;
function inttogjd(a:integer):gjd;
var i:integer;
begin
fillchar(inttogjd,sizeof(inttogjd),0);
i:=1;
while a>0 do begin
inttogjd[i]:=a mod 10;
a:=a div 10;
inc(i);
end;
end;
operator +(a,b:gjd)c:gjd;
var i,x:longint;
begin
fillchar(c,sizeof(c),0);
x:=0;
for i:=1 to maxw do begin
c[i]:=a[i]+b[i]+x;
if i=maxw then break;
x:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
end;
operator *(a:gjd;b:integer)c:gjd;
var i,x:longint;
begin
x:=0;
fillchar(c,sizeof(c),0);
for i:=1 to maxw do begin
c[i]:=a[i]*b+x;
if i=maxw then break;
x:=c[i] div 10;
c[i]:=c[i] mod 10;
end;
end;
function max(a,b:gjd):gjd;
var i:integer;
begin
for i:=maxw downto 1 do begin
if a[i]>b[i] then exit(a);
if a[i]<b[i] then exit(b);
end;
exit(b);
end;
function dp1(n:integer):gjd;
var i,j,l:integer;
begin
for i:=1 to m do dp[i,i]:=c2[m]*a[n,i];
for l:=1 to m-1 do
for i:=1 to m-l do begin
j:=i+l;
dp[i,j]:=max(dp[i,j-1]+c2[m-l]*a[n,j],dp[i+1,j]+c2[m-l]*a[n,i]);
end;
exit(dp[1,m]);
end;
begin
readln(n,m);
c2[0]:=inttogjd(1);
for i:=1 to 80 do c2[i]:=c2[i-1]*2;
for i:=1 to n do begin
for j:=1 to m do
read(a[i,j]);
readln;
end;
fillchar(ans,sizeof(ans),0);
for i:=1 to n do
ans:=ans+dp1(i);
for i:=maxw downto 1 do
if ans[i]<>0 then break;
for j:=i downto 1 do
write(ans[j]);
writeln;
end.