//#include<stdio.h>
//
//char r=0,arr[1100][1100]= {},varr[1100][1100]= {},c=0,or[1100][1100]= {};
//
//void f(int a,int b) {
//
// int i,j;
//
// arr[a][b]='A';
//
// if(arr[a+1][b]=='_') {
//
// f(a+1,b);
//
// }
//
// if(arr[a-1][b]=='_') {
//
// f(a-1,b);
//
// }
//
// if(arr[a][b+1]=='_') {
//
// f(a,b+1);
//
// }
//
// if(arr[a][b-1]=='_') {
//
// f(a,b-1);
//
// }
//
// if(arr[a+1][b]=='j') {
//
// r=1;
//
// return;
//
// }
//
// if(arr[a-1][b]=='j') {
//
// r=1;
//
// return;
//
// }
//
// if(arr[a][b+1]=='j') {
//
// r=1;
//
// return;
//
// }
//
// if(arr[a][b-1]=='j') {
//
// r=1;
//
// return;
//
// }
//
//}
//
//int main() {
//
// int a,b,i,j;
//
// for(i=0; i<=11; i++) {
//
// for(j=0; j<=11; j++) {
//
// arr[i][j]='j';
//
// }
//
// }
//
// for(i=1; i<=10; i++) {
//
// scanf("%s",&arr[i][1]);
//
// }
//
// for(i=1; i<=10; i++) {
//
// for(j=1; j<=10; j++) {
//
// or[i][j]=arr[i][j];
// varr[i][j]=arr[i][j];
//
// }
//
// }
//
// scanf("%d %d",&a,&b);
//
// a++;
//
// b++;
// if(arr[b][a]=='*')
// {
// for(i=1; i<=10; i++) {
// for(j=1; j<=10; j++) {
// printf("%c",or[i][j]);
// }
// printf("\n");
// }
// return ;
// }
//
// f(b,a);
// for(i=1; i<=10; i++) {
// for(j=1; j<=10; j++) {
// if(arr[i][j]=='A') {
// varr[i][j]='*';
//
// }
// printf("%c",varr[i][j]);
// }
// printf("\n");
// }
//}
#include<stdio.h>
#include<math.h>
int mi=1000000,memo[1001][1001]={},o=0,arr[1001][1001]={},n,m,h,ch[1000]={};
void f(int x,int y,int u)
{
int i,j,a,c,s=0;
if(u>mi)
{
return;
}
if(x==n&&y==m)
{
ch[o++]=u;
for(i=0;i<o;i++)
{
if(mi>ch[i])
{
mi=ch[i];
}
}
o=0;
// printf("1. %d ",u);
}
if(memo[x][y]!=0)
{
if(u>=memo[x][y])
{
return;
}
}
c=arr[x][y];
a=abs(arr[x][y]-arr[x+1][y]);
if(a<=1)
{
memo[x][y]=u;
// printf("4. %d %d\n",x,y);sd
arr[x][y]=4321;
f(x+1,y,u+1);
}
arr[x][y]=c;
a=abs(arr[x][y]-arr[x][y+1]);
if(a<=1)
{
memo[x][y]=u;
// printf("5. %d %d\n",x,y);
arr[x][y]=1221;
f(x,y+1,u+1);
}
arr[x][y]=c;
a=abs(arr[x][y]-arr[x-1][y]);
if(a<=1)
{
memo[x][y]=u;
// printf("6. %d %d\n",x,y);
arr[x][y]=1243;
f(x-1,y,u+1);
}
arr[x][y]=c;
a=abs(arr[x][y]-arr[x][y-1]);
if(a<=1)
{
memo[x][y]=u;
// printf("7. %d %d\n",x,y);
arr[x][y]=1221;
f(x,y-1,u+1);
}
}
int main()
{
int s,i,j,g,k=0;
scanf("%d %d",&n,&m);
for(i=0;i<=n+1;i++)
{
for(j=0;j<=m+1;j++)
{
arr[i][j]=1241;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&arr[i][j]);
}
}
f(1,1,1);
for(i=0;i<o;i++)
{
if(mi>ch[i])
{
mi=ch[i];
}
}
if(mi==1000000)
{
printf("0");
return;
}
printf("%d",mi);
}