#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#include <queue>
using namespace std;
int h,w;
char mp[55][55];///标记地图
int a[55][55];///标记数组
int fx[4][2]={1,0,0,1,-1,0,0,-1};///方向
struct node
{
    int i,j,step;
};
int bfs(int pi,int pj)
{
    queue<node>q;
    node now,next,kai;
    kai.i=pi;
    kai.j=pj;
    kai.step=1;
    a[kai.i][kai.j]=true;
    q.push(kai);
    while(!q.empty())
    {
        now=q.front();
        q.pop();
        if(now.i==(h-1)&&now.j==(w-1))
            return now.step;
        for(int k=0;k<4;k++)
        {
            next.i=now.i+fx[k][0];///更新方向
            next.j=now.j+fx[k][1];
            if(next.i<0||next.j<0||next.i>=h||next.j>=w||a[next.i][next.j]||mp[next.i][next.j]=='#')
                continue;
            next.step=now.step+1;///更新部署
            a[next.i][next.j]=true;
            q.push(next);
        }
    }
    return -1;
}
int main()
{
  memset(a,0,sizeof(a));
  scanf("%d %d",&h,&w);
  int sum=0;
  for(int i=0;i<h;i++)
  {
      scanf("%s",&mp[i]);
      for(int j=0;j<w;j++)
      {
          if(mp[i][j]=='.')
            sum++;
      }
  }
  int b;
  b=bfs(0,0);
  if(b==-1)
    printf("-1\n");
  else
    printf("%d\n",sum-b);

}
