require 'set'

class Graph
	def initialize
		@nodes = Set.new
		@edges = Set.new
	end

	def add_node(label = nil)
		Node.new(label)
	end

	def add_edge(u, v)
		e = Edge.new(u, v)
		u.outgoings << e
		v.incomings << e
		e
	end
	
	def del_edge(e)
		u, v = e.from, e.to
		u.outgoings.delete(e)
		v.incomings.delete(e)
		e
	end

	class Node
		def initialize(label)
			@label = label
			@outgoings = Set.new
			@incomings = Set.new
		end
		
		def to_s
			@label
		end
		attr_accessor :incomings, :outgoings
		attr_reader :label
	end

	class Edge
		def initialize(u, v)
			@from = u	
			@to = v
		end
		attr_reader :from, :to
	end

	def reachable_from(s, reached = Set.new, root = true)
		reached << s	
		s.outgoings.each{|e|
			v = e.to
			next if reached.include?(v)
			reachable_from(v, reached, false) 
		}
		root ? reached : nil
	end
end

loop{
	n, m = gets.split.map(&:to_i)
	break if n == 0
	c = (1..m).map{ ['#'] + gets.chomp.split("") + ['#'] }
	tmp = ['#'] * (n + 2)
	c = [tmp] + c + [tmp]

	g = Graph.new
	nodes = (0..m+1).map{|y| (0..n+1).map{|x| g.add_node(c[y][x])}}	
	s = nil

	for y in 0..m+1
		for x in 0..n+1
			u = nodes[y][x]
			next if u.label == '#'
			s = u if u.label == '@'
			[[0,1], [0,-1], [1,0], [-1,0]].each{|dy, dx|
				v = nodes[y+dy][x+dx]
				g.add_edge(u, v) if v.label == '.'	
			}
		end
	end
	
	puts g.reachable_from(s).size
}