#include<iostream>
#include<algorithm>
#include<vector>
#include<math.h>
#include<queue>
#include<string.h>
#define for0(x,n) for(int x=0;x<n;x++)
#define for1(x,n) for(int x=1;x<=n;x++)
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
ll n,m,t;
const int tt=1e2+10,mod=1e9+7,INF=0x7f7f7f7f7f7f7f7f,inf=0xfffffff;
int a[tt][tt];
int vis[tt][tt];
int f[tt][tt];
int mx[]={-1,0,0,1};
int my[]={0,1,-1,0};
queue<PII>q;
void bfs(int x,int y)
{
q.push(PII(x,y));
while(!q.empty())
{
PII now=q.front();
int nx=now.first,ny=now.second;
q.pop();
for0(i,4)
{
int tx=nx+mx[i],ty=ny+my[i];
if(a[tx][ty]==1||tx<1||ty<1||tx>n||ty>m||f[tx][ty]<=f[nx][ny]+1)continue;
f[tx][ty]=min(f[nx][ny]+1,f[tx][ty]);
q.push(PII(tx,ty));
}
}
}
int main()
{
cin>>n>>m;
for1(i,n)
{
for1(j,m)
{
cin>>a[i][j];
f[i][j]=INF;
}
}
f[1][1]=0;
bfs(1,1);
cout<<f[n][m];
}
/*
13 14 1
14
1 19 15
11967
*/