#include using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int H,W; cin >> H >> W; vector S(H); for(auto &s : S) cin >> s; vector> dxy = {{-1,0},{0,1},{1,0},{0,-1}}; const int inf = 1001001001; vector>> dist(H,vector(W,vector(3,inf))); queue> Q; dist.at(0).at(0).at(0) = 0,Q.push({0,0,0}); auto check = [&](int x,int y,int d,int v) -> void { if(dist.at(x).at(y).at(d) == inf) dist.at(x).at(y).at(d) = v,Q.push({x,y,d}); }; while(Q.size()){ auto [x,y,d] = Q.front(); Q.pop(); int now = dist.at(x).at(y).at(d)+1; if(x < H-1) check(x,y,1,now); if(y < W-1) check(x,y,2,now); if(x < H-1 && (S.at(x+1).at(y) != '#' || d == 1)) check(x+1,y,(d==1?1:0),now); if(y < W-1 && (S.at(x).at(y+1) != '#' || d == 2)) check(x,y+1,(d==2?2:0),now); } cout << *min_element(dist.at(H-1).at(W-1).begin(),dist.at(H-1).at(W-1).end()) << endl; }