{
TASK:apple
LANG:Pascal
}

program apple;

type AA=array[1..70,1..70] of integer;
     AB=array[1..139, 1..2] of integer;
var m,n,i,j,p:integer;
    r1,r2,r3,r4:longint;
    A:AA;
    B:AB;

procedure Path2(i2,j2:integer);
var A2:AA;
    i21,j21, p2:integer;
begin
 for i21:=1 to m do
 for j21:=1 to n do A2[i21,j21]:=A[i21,j21];
 for p2:=1 to 6 do A2[B[p2,1],B[p2,2]]:=0;
 r3:=r3+A2[i2,j2];
 if (i2=m) and (j2=n) then
  begin
   if r3>r4 then
   begin
    r4:=r3;
   end;
  end
 else
 begin
  if (j2<n) then Path2(i2,j2+1);
  if (i2<m) then Path2(i2+1,j2);
 end;
 r3:=r3-A2[i2,j2];
end;

procedure Path(i1,j1:integer);
var test:integer;
begin
 r1:=r1+A[i1,j1];
 p:=p+1;
 B[p,1]:=i1;
 B[p,2]:=j1;
 if (i1=m) and (j1=n) then
 begin
  r4:=0;
  Path2(1,1);
  if (r1+r4>r2) then
  begin
   r2:=r1+r4;
  end;
 end
 else
 begin
  if (j1<n) then Path(i1,j1+1);
  if (i1<m) then Path(i1+1,j1);
 end;
 r1:=r1-A[i1,j1];
 B[p,1]:=0;
 B[p,2]:=0;
 p:=p-1;
end;

begin
 r1:=0; r2:=0; p:=0; r3:=0; r4:=0;
 readln(m,n);
 for i:=1 to m do
 begin
  for j:=1 to n do read(A[i,j]);
  readln();
 end;
 Path(1,1);
 writeln(r2);
end.
