step:array[1..4,1..2] of longint=((1,0),(-1,0),(0,1),(0,-1));
var
n,m,i,j,j1,k,max,ans:longint;
a:array[0..501,0..501] of longint;
vis:array[0..501,0..501] of boolean;
rs:array[0..501] of boolean;
f:array[0..300000,1..2] of longint;
g:array[0..501,0..501] of longint;
procedure kp(i,j:longint);
var
x,y,t,mid1,mid2:longint;
begin
x:=i;
y:=j;
mid1:=g[(i+j) div 2,1];
mid2:=g[(i+j) div 2,2];
repeat
while (g[x,1]<mid1) or ((g[x,1]=mid1) and (g[x,2]>mid2)) do inc(x);
while (g[y,1]>mid1) or ((g[y,1]=mid1) and (g[y,2]<mid2)) do dec(y);
if x<=y
then
begin
t:=g[x,1];
g[x,1]:=g[y,1];
g[y,1]:=t;
t:=g[x,2];
g[x,2]:=g[y,2];
g[y,2]:=t;
inc(x);
dec(y);
end;
until x>y;
if x<j
then
kp(x,j);
if y>i
then
kp(y,i);
end;
procedure bfs1(o:longint);
var
s,t,i,j,x,y,x1,y1:longint;
begin
s:=0;
t:=0;
f[s,1]:=1;
f[s,2]:=o;
repeat
x:=f[s,1];
y:=f[s,2];
for i:=1 to 4 do
begin
x1:=x+step[i,1];
y1:=y+step[i,2];
if (a[x1,y1]<a[x,y]) and (not vis[x1,y1]) and (x1>0) and (y1>0) and (x1<=n) and (y1<=m)
then
begin
vis[x1,y1]:=true;
if x1=n
then
rs[y1]:=true;
if x=n
then
rs[y]:=true;
inc(t);
f[t,1]:=x1;
f[t,2]:=y1;
end;
end;
inc(s);
until s>t;
end;
procedure bfs2(o:longint);
var
s,t,i,j,x,y,x1,y1:longint;
begin
s:=0;
t:=0;
f[s,1]:=n;
f[s,2]:=o;
repeat
x:=f[s,1];
y:=f[s,2];
for i:=1 to 4 do
begin
x1:=x+step[i,1];
y1:=y+step[i,2];
if (a[x1,y1]<a[x,y]) and (not vis[x1,y1]) and (x1>0) and (y1>0) and (x1<=n) and (y1<=m)
then
begin
vis[x1,y1]:=true;
inc(t);
f[t,1]:=x1;
f[t,2]:=y1;
if x1=1
then
g[y1,1]:=o;
end;
end;
inc(s);
until s>t;
end;
procedure bfs3(o:longint);
var
s,t,i,j,x,y,x1,y1:longint;
begin
s:=0;
t:=0;
f[s,1]:=n;
f[s,2]:=o;
repeat
x:=f[s,1];
y:=f[s,2];
for i:=1 to 4 do
begin
x1:=x+step[i,1];
y1:=y+step[i,2];
if (a[x1,y1]<a[x,y]) and (not vis[x1,y1]) and (x1>0) and (y1>0) and (x1<=n) and (y1<=m)
then
begin
vis[x1,y1]:=true;
inc(t);
f[t,1]:=x1;
f[t,2]:=y1;
if x1=1
then
g[y1,2]:=o;
end;
end;
inc(s);
until s>t;
end;
begin
readln(n,m);
for i:=1 to n do
begin
for j:=1 to m do
read(a[i,j]);
readln;
end;
for i:=1 to m do
begin
bfs1(i);
end;
ans:=0;
for i:=1 to m do
if not rs[i]
then
inc(ans);
if ans>0
then
begin
writeln(0);
writeln(ans);
halt;
end;
fillchar(vis,sizeof(vis),false);
for i:=1 to m do
bfs2(i);
for i:=m downto 1 do
bfs3(i);
kp(1,m);
k:=1;
repeat
max:=0;
for i:=2 to m do
if (g[i,1]-g[k,2]<2) and (g[i,2]-g[k,2]>max)
then
begin
max:=g[i,2]-g[k,2];
j:=g[i,2];
j1:=g[i,1];
end;
inc(k);
g[k,1]:=j1;
g[k,2]:=j;
until g[k,2]=m;
writeln(1);
writeln(k+2);
end.