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
from collections import deque


h,w=map(int,input().split())
s=[list(input()) for i in range(h)]
dist=[[0 for i in range(w)] for j in range(h)]
que=deque([])
que.append([0,0])
dyx=[[1,0],[0,-1],[-1,0],[0,1]]
ndot=0
for i in range(h):
  for j in range(w):
    if s[i][j]==".":
      ndot+=1
s[0][0]="#"

while que:
  y,x=que.popleft()
  for dy,dx in dyx:
    nx=x+dx
    ny=y+dy
    if (nx<0 or nx>w-1 or ny<0 or ny>h-1):
      continue
    if s[ny][nx]==".":
      dist[ny][nx]=dist[y][x]+1
      que.append([ny,nx])
      s[ny][nx]="#"

ans=ndot-dist[h-1][w-1]-1
if dist[h-1][w-1]==0:
  ans=-1
print(ans)