#include<bits/stdc++.h>
using namespace std;
const int N=2e3+10,INF=0x3f3f3f3f;

int n,m;
char g[N][N];
int dp[N][N][3]; 

void solve(){
	
	if(n==1&&m==1){
		cout<<0<<endl;
		return;
	}
	
	memset(dp,0x3f,sizeof(dp));
	
	if(g[1][1]=='.'){
		dp[1][1][0]=1;
		dp[1][1][1]=1;
		dp[1][1][2]=1;
	}
	
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i==1&&j==1) continue;
			if(g[i][j]=='*') continue;
			
			if(i-1>=1&&g[i-1][j]=='.'){
				int value=min(dp[i-1][j][0],min(dp[i-1][j][1],dp[i-1][j][2])+1);
				dp[i][j][0]=min(dp[i][j][0],value);
			}
			if(j-1>=1&&g[i][j-1]=='.'){
				int value=min(dp[i][j-1][1],min(dp[i][j-1][0],dp[i][j-1][2])+1);
				dp[i][j][1]=min(dp[i][j][1],value);
			}
			if(i-1>=1&&j-1>=1&&g[i-1][j-1]=='.'){
				int value=min(dp[i-1][j-1][2],min(dp[i-1][j-1][0],dp[i-1][j-1][1])+1);
				dp[i][j][2]=min(dp[i][j][2],value);
			}
		}
	}
	
	int res=INF;
	for(int i=0;i<3;i++){
		res=min(res,dp[n][m][i]);
	}
	
	if(res==INF){
		cout<<-1<<endl;
	}else{
		cout<<res<<endl;
	}
	
	return;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>g[i][j];
		}
	}
	
	solve();

    return 0;
}