#include <bits/stdc++.h>
#define endl cout<<"\n";
#define fi first
#define int long long
#define se second
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define op freopen
#define TXT "test"
#define freo if(fopen(TXT".inp","r")){op(TXT".inp","r",stdin);op(TXT".out","w",stdout);}

using namespace std;
int n,m,d1[1005][1005],d2[1005][1005];
bool vs1[1005][1005],vs2[1005][1005];
bool x[1005][1005];
vector<pair<int,int>> a[1005][1005];
void bfs(pair<int,int> i, int d[1005][1005] , bool vs[1005][1005] )
{
    queue<pair<int,int>> q;
    pair<int,int> c;
    q.push(i);
    vs[i.fi][i.se]=1;
    while(!q.empty())
    {
        c=q.front();
        q.pop();
        for(pair<int,int> &j:a[c.fi][c.se])
        {
            if(!vs[j.fi][j.se])
            {
                d[j.fi][j.se]=d[c.fi][c.se]+1;
                vs[j.fi][j.se]=1;
                q.push(j);
            }
        }
    }
}
main()
{
    ios;
    freo;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>x[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(!x[i][j]&&!x[i][j+1])
            {
                a[i][j].push_back({i,j+1});
                a[i][j+1].push_back({i,j});
            }
            if(!x[i][j]&&!x[i+1][j])
            {
                a[i][j].push_back({i+1,j});
                a[i+1][j].push_back({i,j});
            }
            if(!x[i][j]&&!x[i][j-1])
            {
                a[i][j].push_back({i,j-1});
                a[i][j-1].push_back({i,j});
            }
            if(!x[i][j]&&!x[i-1][j])
            {
                a[i][j].push_back({i-1,j});
                a[i-1][j].push_back({i,j});
            }
        }
    }
    bfs({1,1},d1,vs1);
    bfs({n,m},d2,vs2);
    int MIN=INT_MAX;
    bool OK=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(vs1[i][j]&&vs2[i][j]&&d1[i][j]==d2[i][j])
            {
                MIN=min(MIN,d1[i][j]);
                OK=1;
            }
        }
    }
    if(!OK)
        cout<<"#";
    else
        cout<<MIN;
}
