import sys def main() -> None: input = sys.stdin.readline h, w = map(int, input().split()) grid = [input().strip() for _ in range(h)] start = [bytearray(w) for _ in range(h)] goal = [bytearray(w) for _ in range(h)] for i in range(h): gi = grid[i] si = start[i] prev = start[i - 1] if i else None for j, ch in enumerate(gi): if ch == "#": continue if i == 0 and j == 0: si[j] = 1 elif (j and si[j - 1]) or (i and prev[j]): si[j] = 1 base = h + w - 2 if start[h - 1][w - 1]: print(base) return for i in range(h - 1, -1, -1): gi = grid[i] goali = goal[i] nxt = goal[i + 1] if i + 1 < h else None for j in range(w - 1, -1, -1): if gi[j] == "#": continue if i == h - 1 and j == w - 1: goali[j] = 1 elif (j + 1 < w and goali[j + 1]) or (i + 1 < h and nxt[j]): goali[j] = 1 # Insert one horizontal all-open row between rows r and r+1. for r in range(h - 1): left_entry = None sr = start[r] for j in range(w): if sr[j]: left_entry = j break if left_entry is None: continue right_exit = None gr = goal[r + 1] for j in range(w - 1, -1, -1): if gr[j]: right_exit = j break if right_exit is not None and left_entry <= right_exit: print(base + 1) return # Insert one vertical all-open column between columns c and c+1. for c in range(w - 1): top_entry = None for i in range(h): if start[i][c]: top_entry = i break if top_entry is None: continue bottom_exit = None for i in range(h - 1, -1, -1): if goal[i][c + 1]: bottom_exit = i break if bottom_exit is not None and top_entry <= bottom_exit: print(base + 1) return print(base + 2) if __name__ == "__main__": main()