program lacusta;
var
min,n,m,k,miny:integer;
a,b:array[1..5,1..5] of integer;
f,g:text;
procedure beolvas;
var
i,j:integer;
begin
readln(f,n,m);
for i:=1 to n do begin
for j:=1 to m do
read(f,a[i,j]);
readln(f);
end;
end;
function masodikmin(i:integer):integer;
var
j,min2:integer;
begin
min2:=maxint;
for j:=1 to m do
if (min2>b[i,j]) and (b[i,j]<>min) then begin
min2:=b[i,j];
k:=j;
end;
masodikmin:=min2;
end;
function minimum(i:integer):integer;
var
min,j:integer;
begin
min:=maxint;
for j:=1 to m do
if b[i,j]<min then begin
min:=b[i,j];
k:=j;
end;
minimum:=min;
end;
procedure work;
var
i,j:integer;
begin
miny:=1;
min:=a[1,1];
for i:=1 to n-2 do begin
for j:=1 to m do
b[i,j]:=a[i,j]+min+a[i+1,j];
b[1,1]:=maxint;
min:=minimum(i);
if miny=k then begin
min:=masodikmin(i);
end;
miny:=k;
end;
for j:=1 to m-1 do
b[n-1,j]:=min+a[n-1,j]+a[n,j];
b[n-1,m]:=maxint;
min:=minimum(n-1);
if k<>miny then writeln(g,min+a[n,m])
else writeln(g,masodikmin(n-1)+a[n,m]);
end;
begin
assign(f,'lacusta.in');
assign(g,'lacusta.out');
reset(f);
rewrite(g);
beolvas;
work;
close(g);
end.