#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
****************************************************************/