object Main extends App {
  val line = readLine.split(" ").map(_.toInt)
  val H = line(0)
  val W = line(1)
  val board = Array.ofDim[Int](H*W)
  for(j <- 0 until H) {
    val l = readLine.toList
    for((b, i) <- l.zipWithIndex) {
      board(j*W+i) = if(b == '.') Int.MaxValue else -1
    }
  }
  val count = board.count(_ == Int.MaxValue)
  board(0) = 0
  val last = H*W - 1

  def nextStep(board: Array[Int], pos:(Int, Int)=(0,0), value:Int=0):Unit = {
    val direction = List((0,1), (0,-1), (1, 0), (-1,0))
    val myValue = value + 1
    var maximum = -1
    for(d <- direction) {
      val x = pos._1 + d._1
      val y = pos._2 + d._2
      if(x != -1 && x != W && y != -1 && y != H) {
        if(x+y*W == last) {
          board(last) = myValue
        } else if(board(x+y*W) > myValue) {
          board(x+y*W) = myValue
          nextStep(board, (x,y), myValue)
        }
      }
    }
  }
  nextStep(board)
  if(board(last) == Int.MaxValue) {
    println(-1)
  } else {
    println(count-(board(last)+1))
  }
}
