dp,dp1:array[-5..1005] of int64;
a:array[-5..1005,-5..1005] of longint;
f:array[-5..1005,-5..1005] of int64;
function max(a,b:int64):int64;
begin
if a>b then exit(a) else exit(b);
end;
begin
//assign(input,'number.in');reset(input);
//assign(output,'number.out');rewrite(output);
readln(n,m);
for i:=1 to n do
for j:=1 to m do read(a[i,j]);
for i:=1 to n do f[i,1]:=a[i,1];
for i:=2 to n do f[i,1]:=max(f[i,1],f[i-1,1]+a[i,1]);
if m=1 then
begin
writeln(f[n,m]);
close(input);
close(output);
halt;
end;
for i:=2 to m-1 do
begin
for j:=1 to n do dp[j]:=f[j,i-1]+a[j,i];
for j:=2 to n do dp[j]:=max(dp[j],dp[j-1]+a[j,i]);
for j:=1 to n do dp1[j]:=f[j,i-1]+a[j,i];
for j:=n-1 downto 1 do dp1[j]:=max(dp1[j],dp1[j+1]+a[j,i]);
for j:=1 to n do f[j,i]:=max(dp[j],dp1[j]);
end;
for i:=1 to n do f[i,m]:=f[i,m-1]+a[i,m];
for i:=2 to n do f[i,m]:=max(f[i,m],f[i-1,m]+a[i,m]);
writeln(f[n,m]);
close(input);
close(output);
end.