program game;
type
hp=array[0..20]of longint;
var
n,m,i,j:longint;
total:hp;
a:array[0..80]of longint;
f:array[0..80,0..80]of hp;
he1,he2,mn:hp;
function max(a,b:hp):hp;
var
i:longint;
begin
if a[0]>b[0] then exit(a);
if a[0]<b[0] then exit(b);
for i:=a[0] downto 1 do
begin
if a[i]>b[i] then exit(a);
if b[i]>a[i] then exit(b);
end;
exit(a);
end;
function jia(a,b:hp):hp;
var
i,x:longint;
begin
fillchar(jia,sizeof(jia),0);
if a[0]>b[0] then jia[0]:=a[0] else jia[0]:=b[0];
x:=0;
for i:=1 to jia[0] do
begin
x:=a[i]+b[i]+x;
jia[i]:=x mod 10000;
x:=x div 10000;
end;
while x<>0 do
begin
inc(jia[0]);
jia[jia[0]]:=x mod 10000;
x:=x div 10000;
end;
exit;
end;
procedure print(a:hp);
var
i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do
begin
if a[i]<10 then write(0);
if a[i]<100 then write(0);
if a[i]<1000 then write(0);
write(a[i]);
end;
writeln;
end;
procedure main;
var
i,j:longint;
begin
fillchar(f,sizeof(f),0);
for i:=1 to m do begin f[i,i][0]:=1;f[i,i][1]:=a[i]+a[i];end;
for i:=m-1 downto 1 do
for j:=i+1 to m do
begin
mn[0]:=1;mn[1]:=a[i];
he1:=jia(f[i+1,j],mn);
mn[0]:=1;mn[1]:=a[j];
he2:=jia(f[i,j-1],mn);
f[i,j]:=max(he1 , he2);
f[i,j]:=jia(f[i,j],f[i,j]);
end;
total:=jia(total,f[1,m]);
end;
begin
assign(input,'game.in');reset(input);
assign(output,'game.out');rewrite(output);
fillchar(total,sizeof(total),0);
total[0]:=1;
readln(n,m);
for i:=1 to n do
begin
fillchar(a,sizeof(a),0);
for j:=1 to m do
begin
read(a[j]);
end;
main;
end;
print(total);
close(input);
close(output);
end.
type
hp=array[0..20]of longint;
var
n,m,i,j:longint;
total:hp;
a:array[0..80]of longint;
f:array[0..80,0..80]of hp;
he1,he2,mn:hp;
function max(a,b:hp):hp;
var
i:longint;
begin
if a[0]>b[0] then exit(a);
if a[0]<b[0] then exit(b);
for i:=a[0] downto 1 do
begin
if a[i]>b[i] then exit(a);
if b[i]>a[i] then exit(b);
end;
exit(a);
end;
function jia(a,b:hp):hp;
var
i,x:longint;
begin
fillchar(jia,sizeof(jia),0);
if a[0]>b[0] then jia[0]:=a[0] else jia[0]:=b[0];
x:=0;
for i:=1 to jia[0] do
begin
x:=a[i]+b[i]+x;
jia[i]:=x mod 10000;
x:=x div 10000;
end;
while x<>0 do
begin
inc(jia[0]);
jia[jia[0]]:=x mod 10000;
x:=x div 10000;
end;
exit;
end;
procedure print(a:hp);
var
i:longint;
begin
write(a[a[0]]);
for i:=a[0]-1 downto 1 do
begin
if a[i]<10 then write(0);
if a[i]<100 then write(0);
if a[i]<1000 then write(0);
write(a[i]);
end;
writeln;
end;
procedure main;
var
i,j:longint;
begin
fillchar(f,sizeof(f),0);
for i:=1 to m do begin f[i,i][0]:=1;f[i,i][1]:=a[i]+a[i];end;
for i:=m-1 downto 1 do
for j:=i+1 to m do
begin
mn[0]:=1;mn[1]:=a[i];
he1:=jia(f[i+1,j],mn);
mn[0]:=1;mn[1]:=a[j];
he2:=jia(f[i,j-1],mn);
f[i,j]:=max(he1 , he2);
f[i,j]:=jia(f[i,j],f[i,j]);
end;
total:=jia(total,f[1,m]);
end;
begin
assign(input,'game.in');reset(input);
assign(output,'game.out');rewrite(output);
fillchar(total,sizeof(total),0);
total[0]:=1;
readln(n,m);
for i:=1 to n do
begin
fillchar(a,sizeof(a),0);
for j:=1 to m do
begin
read(a[j]);
end;
main;
end;
print(total);
close(input);
close(output);
end.