#include <bits/stdc++.h>
#define ll long long

using namespace std;

int n,m;
bool tabla[510][510];
bool mark[510][510];
int vreme[510][510];

typedef struct{
int x;
int y;
int t;
} polje;
queue<polje>red;

bool utabli(int i, int j)
{
    return i>=0 && i<n && j>=0 && j<m && tabla[i][j];
}

void obidji(int x, int y, int t)
{
    for(int i=-1;i<=1;i++)
        for(int j=-1;j<=1;j++)
            if(utabli(x+i,y+j) && !mark[x+i][y+j])
                red.push({x+i,y+j,t+1});
}

void bfs()
{
    vreme[0][0]=0;
    red.push({0,0,0});
    while(!red.empty())
    {
        polje tek=red.front();
        int x=tek.x;
        int y=tek.y;
        int t=tek.t;
        red.pop();
        if(!mark[x][y])
        {
            vreme[x][y]=t;
            mark[x][y]=true;
            obidji(x,y,t);
        }
    }
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);

    cin>>n>>m;
    string s;
    for(int i=0;i<n;i++)
    {
        cin>>s;
        for(int j=0;j<m;j++)
            tabla[i][j]=(s[j]=='.');
    }
    vreme[n-1][m-1]=-1;
    bfs();
    cout<<vreme[n-1][m-1];
    /*for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<vreme[i][j]<<" ";
        cout<<endl;
    }*/
	return 0;
}