from collections import deque import sys INF = 100000000 def bfs(si, sj, h, w, C): dist = [[INF for _ in range(w)] for _ in range(h)] q = deque() q.append((si, sj)) dist[si][sj] = 0 while len(q) > 0: i, j = q.popleft() for di, dj in [(1, 0), (-1, 0), (0, 1), (0, -1)]: ni = i + di nj = j + dj if 0 <= ni and ni < h and 0 <= nj and nj < w and C[ni][nj] != '#' and dist[i][j] + 1 < dist[ni][nj] and dist[i][j] + 1 <= abs(ni-si) + abs(nj-sj): dist[ni][nj] = dist[i][j] + 1 q.append((ni, nj)) return dist def main(): h, w = map(int, sys.stdin.readline().split()) C = ["" for _ in range(h)] for i in range(h): C[i] = sys.stdin.readline() dist_S = bfs(0, 0, h, w, C) dist_G = bfs(h-1, w-1, h, w, C) if dist_S[h-1][w-1] == h+w-2: print(h+w-2) return is_max = 0 js_max = 0 for i in range(h): for j in range(w): if dist_S[i][j] == i+j: is_max = max(is_max, i) js_max = max(js_max, j) ig_min = h-1 jg_min = w-1 for i in range(h): for j in range(w): if dist_G[i][j] == h+w-2-i-j: ig_min = min(ig_min, i) jg_min = min(jg_min, j) if ig_min - is_max <= 1 or jg_min - js_max <= 1: print(h+w-1) else: print(h+w) if __name__ == "__main__": main()