#include using namespace std; int h, w; string c[2000]; int main() { cin >> h >> w; for(int i = 0; i < h; i++){ cin >> c[i]; } vector> dpS(h, vector(w, 0)); dpS[0][0] = 1; for(int i = 0; i < h; i++){ for(int j = 0; j < w; j++){ if(c[i][j] == '#'){ dpS[i][j] = 0; continue; } if(i > 0 && dpS[i-1][j]) dpS[i][j] = 1; if(j > 0 && dpS[i][j-1]) dpS[i][j] = 1; } } vector> dpG(h, vector(w, 0)); dpG[h - 1][w - 1] = 1; for(int i = h - 1; i >= 0; i--){ for(int j = w - 1; j >= 0; j--){ if(c[i][j] == '#'){ dpG[i][j] = 0; continue; } if(i < h - 1 && dpG[i + 1][j]) dpG[i][j] = 1; if(j < w - 1 && dpG[i][j + 1]) dpG[i][j] = 1; } } if(dpS[h - 1][w - 1]){ cout << h + w - 2 << "\n"; return 0; } bool isok = 0; for(int i = 0; i < h - 1; i++){ bool pref = 0; for(int j = 0; j < w; j++){ if(dpS[i][j]) pref = 1; if(pref && dpG[i + 1][j]) isok = 1; } } for(int j = 0; j < w - 1; j++){ bool pref = 0; for(int i = 0; i < h; i++){ if(dpS[i][j]) pref = 1; if(pref && dpG[i][j + 1]) isok = 1; } } if(isok){ cout << h + w - 1 << "\n"; } else { cout << h + w << "\n"; } }