import queue


def func(R, C, c, queue):
    # ゴールできるかを判断(幅優先探索)
    sy, sx = [1, 1]
    gy, gx = [R, C]
    score = R * C
    for i in range(1, R + 1):
        for j in range(1, C + 1):
            if c[i][j] == "#":
                score -= 1

    queue.put([sy, sx])
    visited = [[-1 for i in range(len(c[0]))] for i in range(len(c))]
    count = 0

    def search(sy, sx, queue, visited):
        if c[sy][sx] != "#" and visited[sy][sx] == -1:
            queue.put([sy, sx])
            visited[sy][sx] = 1
        return

    while 1:
        size = queue.qsize()
        if size == 0:
            return -1
        for i in range(size):
            [sy, sx] = queue.get()
            visited[sy][sx] = count
            if sy == gy and sx == gx:
                return score - count - 1
            search(sy + 1, sx, queue, visited)
            search(sy - 1, sx, queue, visited)
            search(sy, sx + 1, queue, visited)
            search(sy, sx - 1, queue, visited)
        count += 1


R, C = [int(i) for i in input().split()]
c = [["#" for i in range(C + 2)] for i in range(R + 2)]
for i in range(1, R + 1):
    c[i][1:-1] = input()
print(func(R, C, c, queue.Queue()))
"""
# print("print(func({}, {}, {}, queue.Queue()))".format(R, C, c))
print(func(3, 3, [['#', '#', '#', '#', '#'], ['#', '.', '.', '#', '#'], ['#', '#', '.', '.', '#'], ['#', '.', '.', '.', '#'], ['#', '#', '#', '#', '#']], queue.Queue()))
print(func(10, 37, [['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#'], ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'], ['#', '.', '.', '.', '#', '.', '.', '.', '#', '#', '#', '#', '.', '.', '.', '#', '#', '#', '#', '.', '.', '#', '#', '#', '.', '.', '.', '#', '#', '#', '.', '.', '.', '#', '#', '#', '.', '.', '#'], ['#', '.', '.', '#', '.', '#', '.', '.', '#', '.', '.', '.', '#', '.', '#', '#', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#'], ['#', '.', '.', '#', '.', '#', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#'], ['#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '#', '#', '.', '#', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '#', '#', '#', '.', '#', '.', '#', '#', '#', '.', '#'], ['#', '.', '#', '#', '#', '#', '#', '.', '#', '#', '#', '#', '.', '.', '#', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '.', '#', '#', '.', '.', '.', '.', '#', '#', '.', '.', '.', '#'], ['#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#'], ['#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '#', '.', '.', '.', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#', '.', '.', '.', '#', '.', '#'], ['#', '.', '#', '.', '.', '.', '#', '.', '#', '#', '#', '#', '.', '.', '.', '#', '#', '#', '#', '.', '.', '#', '#', '#', '.', '.', '.', '#', '#', '#', '.', '.', '.', '#', '#', '#', '.', '.', '#'], ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'], ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']], queue.Queue()))
"""


Measured memory_bytes: 4208