#include<bits/stdc++.h>;
using namespace std;
int a,b,n[3][11],n1=1,m[50][50],s[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
char maps[50][50];
struct dd1{
int x,y,cmd;
};
void bfs(){
queue<dd1>q;
q.push({1,1,1});
while(!q.empty()){
int x=q.front().x;
int y=q.front().y;
int cmd=q.front().cmd;
q.pop();
if(xa&&yb){
cout<<cmd;
return;
}
for(int i=0;i<4;i++){
int xx=x+s[i][0];
int yy=y+s[i][1];
if(xx<1||yy<1||xx>a||yy>b)continue;
if(maps[xx][yy]'#')continue;
if(m[xx][yy])continue;
m[xx][yy]=1;
if(maps[xx][yy]''){ for(int j=1;j<=10;j++){ if(n[1][j]==xx&&n[2][j]==yy)continue; m[n[1][j]][n[2][j]]=1; q.push({n[1][j],n[2][j],cmd+1}); } } else q.push({xx,yy,cmd+1}); } } cout<<-1; } int main(){ cin>>a>>b; for(int i=1;i<=a;i++){ for(int j=1;j<=b;j++){ cin>>maps[i][j]; if(maps[i][j]==''){
n[1][n1]=i;
n[2][n1]=j;
n1++;
}
}
}
bfs();
return 0;
}