#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int H, W; cin >> H >> W; vector G(H); for (int i = 0; i < H; ++i) cin >> G[i]; const int INF = 1e9; vector> O(H + 2, vector(W + 2, INF)); vector> R(H + 2, vector(W + 2, INF)); vector> C(H + 2, vector(W + 2, INF)); vector> X(H + 2, vector(W + 2, INF)); O[1][1] = 0; for (int i = 1; i <= H; ++i) { for (int j = 1; j <= W; ++j) { if (G[i - 1][j - 1] != '#') { if (i > 1) O[i][j] = min(O[i][j], O[i - 1][j]); if (j > 1) O[i][j] = min(O[i][j], O[i][j - 1]); if (i > 1) O[i][j] = min(O[i][j], R[i - 1][j]); if (j > 1) O[i][j] = min(O[i][j], C[i][j - 1]); } else { O[i][j] = INF; } if (i < H) { R[i][j] = min(R[i][j], O[i][j] + 1); if (j > 1) R[i][j] = min(R[i][j], R[i][j - 1]); if (j > 1) R[i][j] = min(R[i][j], X[i][j - 1]); } if (j < W) { C[i][j] = min(C[i][j], O[i][j] + 1); if (i > 1) C[i][j] = min(C[i][j], C[i - 1][j]); if (i > 1) C[i][j] = min(C[i][j], X[i - 1][j]); } if (i < H && j < W) { X[i][j] = min(R[i][j] + 1, C[i][j] + 1); } } } if (O[H][W] >= INF) { cout << -1 << '\n'; } else { cout << (H + W - 2 + O[H][W]) << '\n'; } return 0; }