#include<iostream>
#include<queue>
using namespace std;
int R,C;
char maze[45][45];
int dist[45][45];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int bfs(){
    queue<pair<int,int>> q;
    q.push({1,1});
    dist[1][1]=1;
    while(!q.empty()){
        auto [x,y]=q.front();q.pop();
        if(x==R&&y==C)return dist[x][y];
        for(int i=0;i<4;i++){
            int nx=x+dx[i],ny=y+dy[i];
            if(nx>=1&&nx<=R&&ny>=1&&ny<=C&&maze[nx][ny]=='.'&&!dist[nx][ny]){
                dist[nx][ny]=dist[x][y]+1;
                q.push({nx,ny});
            }
        }
    }
    return -1;
}
int main(){
    cin>>R>>C;
    for(int i=1;i<=R;i++)
        for(int j=1;j<=C;j++)
            cin>>maze[i][j];
    cout<<bfs();
    return 0;
}
/**************************************************************
	Problem: 1432
	User: zhengzihao
	Language: C++
	Result: Accepted
	Time:29 ms
	Memory:2088 kb
****************************************************************/