#include <bits/stdc++.h>
using namespace std;
 
char a[150][150];
//存储到达每个点最少需要多少步
int d[150][150]; 
int m,n;

//递归求步数 
void fun(int dep,int i,int j){
	if(dep < d[i][j]){
		d[i][j] = dep;
		if(a[i-1][j] == '.') fun(dep+1,i-1,j); 
		if(a[i+1][j] == '.') fun(dep+1,i+1,j);
		if(a[i][j-1] == '.') fun(dep+1,i,j-1);
		if(a[i][j+1] == '.') fun(dep+1,i,j+1);
	} 
}
 
int main(){
    int i,j;
    cin>>n>>m;
	 
    //.表示能走,#表示不能走 
    for(i = 1;i <= n;i++){
        for(j = 1;j <= m;j++){
            cin>>a[i][j];
            d[i][j] = INT_MAX;
        }
    }
    
    fun(1,1,1);
    cout<<d[n][m]<<endl; 
    
}

/**************************************************************
	Problem: 1432
	User: admin
	Language: C++
	Result: Accepted
	Time:28 ms
	Memory:2184 kb
****************************************************************/