function Main(input) { input = input.trim().split("\n"); const [H, W] = input.shift().split(" ").map(Number); const C = input.map(e => e.trim()); let visited = []; for (let i = 0; i < H; i++) visited.push([...new Array(W).fill(0)]); // S:1, G:-1 function dfs(nh, nw, a) { if (nh + a >= 0 && nh + a < H && visited[nh + a][nw] === 0&& C[nh + a][nw] !== "#") { visited[nh + a][nw] = a; dfs(nh + a, nw, a); } if (nw + a >= 0 && nw + a < W && visited[nh][nw + a] === 0&& C[nh][nw + a] !== "#") { visited[nh][nw + a] = a; dfs(nh, nw + a, a); } } visited[0][0] = 1; dfs(0, 0, 1); if (visited[H - 1][W - 1]) { console.log(H + W - 2); return; } visited[H - 1][W - 1] = -1; dfs(H - 1, W - 1, -1); let mhs = 0, mws = 0, mhg = H - 1, mwg = W - 1; for (let i = 0; i < H; i++) { for (let j = 0; j < W; j++) { if (visited[i][j] === 1) { if (mhs < i) mhs = i; if (mws < j) mws = j; } if (visited[i][j] === -1) { if (mhg > i) mhg = i; if (mwg > j) mwg = j; } } } if (mhg - mhs <= 1 || mwg - mws <= 1) { console.log(H + W - 1); } else { console.log(H + W); } } Main(require("fs").readFileSync(0)+"")