#include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define fi first
#define se second
#define pii pair<int,int>
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int MOD=998244353;
const int MAX=1e5+1;
const int inf=1e6;
int add(int a,int b){ return ((a%MOD)+(b%MOD))%MOD;}
int mul(int a,int b){ return ((a%MOD)*(b%MOD))%MOD;}
int sub(int x,int y){ return ((x - y) % MOD) + ((x >= y) ? 0 : MOD);}
int ceil_div(int a,int b) {return a%b==0?a/b:(a/b)+1;}
int be_itr(int x,int n)
{
int res=1;
while(n)
{
if(n%2==1){
res*=x;
res%=MOD;
}
n/=2;
x*=x;
x%=MOD;
}
return res;
}
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
int n,m;
bool val(int x, int y)
{
if(x<1 || y<1 || x>n || y>m)return false;
return true;
}
void solve()
{
cin>>n>>m;
int a[n+1][m+1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cin>>a[i][j];
}
int dis[n+1][m+1];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)dis[i][j]=inf;
}
queue<pair<int,int>>q;
q.push({1,1});
dis[1][1]=0;
while(!q.empty())
{
int x=q.front().fi;
int y=q.front().se;
q.pop();
for(int i=0;i<4;i++)
{
int nx=x+dx[i],ny=y+dy[i];
if(val(nx,ny))
{
if(a[nx][ny]==1)
{
int k1=dis[x][y]+1;
if(k1<dis[nx][ny]){
dis[nx][ny]=k1;
q.push({nx,ny});
}
}
else{
if(dis[x][y]<dis[nx][ny])
{
dis[nx][ny]=dis[x][y];
q.push({nx,ny});
}
}
}
}
}
cout<<dis[n][m]<<endl;
}
int32_t main()
{
IOS;
int t=1;//cin>>t;
while(t--)
{
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBJT1MgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgpjb25zdCBpbnQgTU9EPTk5ODI0NDM1MzsKY29uc3QgaW50IE1BWD0xZTUrMTsKY29uc3QgaW50IGluZj0xZTY7CgppbnQgYWRkKGludCBhLGludCBiKXsgcmV0dXJuICgoYSVNT0QpKyhiJU1PRCkpJU1PRDt9CmludCBtdWwoaW50IGEsaW50IGIpeyByZXR1cm4gKChhJU1PRCkqKGIlTU9EKSklTU9EO30KaW50IHN1YihpbnQgeCxpbnQgeSl7IHJldHVybiAoKHggLSB5KSAlIE1PRCkgKyAoKHggPj0geSkgPyAwIDogTU9EKTt9CmludCBjZWlsX2RpdihpbnQgYSxpbnQgYikge3JldHVybiBhJWI9PTA/YS9iOihhL2IpKzE7fQoKaW50IGJlX2l0cihpbnQgeCxpbnQgbikKewogICAgaW50IHJlcz0xOwogICAgd2hpbGUobikKICAgIHsKICAgICAgICBpZihuJTI9PTEpewogICAgICAgICAgICByZXMqPXg7CiAgICAgICAgICAgIHJlcyU9TU9EOwogICAgICAgIH0KICAgICAgICBuLz0yOwogICAgICAgIHgqPXg7CiAgICAgICAgeCU9TU9EOwogICAgfQogICAgcmV0dXJuIHJlczsKfQoKaW50IGR4W109ey0xLDAsMSwwfTsKaW50IGR5W109ezAsMSwwLC0xfTsKCmludCBuLG07CmJvb2wgdmFsKGludCB4LCBpbnQgeSkKewogICAgaWYoeDwxIHx8IHk8MSB8fCB4Pm4gfHwgeT5tKXJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9CgoKdm9pZCBzb2x2ZSgpCnsKICAgIGNpbj4+bj4+bTsKICAgIGludCBhW24rMV1bbSsxXTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgewogICAgICAgIGZvcihpbnQgaj0xO2o8PW07aisrKWNpbj4+YVtpXVtqXTsKICAgIH0KICAgIGludCBkaXNbbisxXVttKzFdOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICB7CiAgICAJZm9yKGludCBqPTE7ajw9bTtqKyspZGlzW2ldW2pdPWluZjsKICAgIH0KICAgIAogICAgcXVldWU8cGFpcjxpbnQsaW50Pj5xOwogICAgcS5wdXNoKHsxLDF9KTsKICAgIGRpc1sxXVsxXT0wOwoKICAgIHdoaWxlKCFxLmVtcHR5KCkpCiAgICB7CiAgICAgICAgaW50IHg9cS5mcm9udCgpLmZpOwogICAgICAgIGludCB5PXEuZnJvbnQoKS5zZTsKICAgICAgICBxLnBvcCgpOwogICAgICAgIGZvcihpbnQgaT0wO2k8NDtpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgbng9eCtkeFtpXSxueT15K2R5W2ldOwogICAgICAgICAgICBpZih2YWwobngsbnkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihhW254XVtueV09PTEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW50IGsxPWRpc1t4XVt5XSsxOwogICAgICAgICAgICAgICAgICAgIGlmKGsxPGRpc1tueF1bbnldKXsKICAgICAgICAgICAgICAgICAgICAgICAgZGlzW254XVtueV09azE7CiAgICAgICAgICAgICAgICAgICAgICAgIHEucHVzaCh7bngsbnl9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgIGlmKGRpc1t4XVt5XTxkaXNbbnhdW255XSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc1tueF1bbnldPWRpc1t4XVt5XTsKICAgICAgICAgICAgICAgICAgICAgICAgcS5wdXNoKHtueCxueX0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQ8PGRpc1tuXVttXTw8ZW5kbDsKfQoKaW50MzJfdCBtYWluKCkKewogICAgSU9TOwogICAgaW50IHQ9MTsvL2Npbj4+dDsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0=