Constraints

* H is an integer between 2 and 50 (inclusive).
* W is an integer between 2 and 50 (inclusive).
* s_{i, j} is `.` or `#` (1 \leq i \leq H, 1 \leq j \leq W).
* s_{1, 1} and s_{H, W} are `.`.

Input

Input is given from Standard Input in the following format:


H W
s_{1, 1}s_{1, 2}s_{1, 3} ... s_{1, W}
s_{2, 1}s_{2, 2}s_{2, 3} ... s_{2, W}
:   :
s_{H, 1}s_{H, 2}s_{H, 3} ... s_{H, W}


Output

Print the maximum possible score that Snuke can achieve, or print -1 if the game cannot be completed.

Examples

Input

3 3
..#
#..
...


Output

2


Input

3 3
..#
..
...


Output

2


Input

10 37
.....................................
...#...####...####..###...###...###..
..#.#..#...#.##....#...#.#...#.#...#.
..#.#..#...#.#.....#...#.#...#.#...#.
.#...#.#..##.#.....#...#.#.###.#.###.
.#####.####..#.....#...#..##....##...
.#...#.#...#.#.....#...#.#...#.#...#.
.#...#.#...#.##....#...#.#...#.#...#.
.#...#.####...####..###...###...###..
.....................................


Output

209
# 
import queue

H,W=map(int,input().split())
c,b=[],0
for i in [0]*H:
    c.append(input())
    b+=c[-1].count('#')
    
vis=[[0]*W for _ in [0]*H]

q=queue.Queue()
q.put((0,0,1))
res=-1
while not q.empty():
    x,y,d=q.get()
    for dx,dy in [(1,0),(0,1),(-1,0),(0,-1)]:
        nx,ny=x+dx,y+dy
        if (nx,ny)==(W-1,H-1):
            res=H*W-(d+1)-b
        if 0<=nx<=W-1 and 0<=ny<=H-1:
            if not vis[ny][nx] and c[ny][nx]=='.':
                q.put((nx,ny,d+1))
                vis[ny][nx]=1
        if res>-1:
            break
    if res>-1:
        break
print(res)