program red_and_black;
const dx:array[1..4]of integer=(0,1,0,-1);
dy:array[1..4]of integer=(1,0,-1,0);
var s:string;
i,j,k,n,f,x,y,nx,ny,w,h,head,tail,sum:integer;
gr:array[0..40,0..40]of integer;
dui:array[1..1000,1..2]of integer;
procedure find(x,y:integer);
begin
head:=1;
tail:=1;
dui[head,1]:=x;
dui[head,2]:=y;
while head<=tail do
begin
for i:=1 to 4 do
begin
nx:=dui[head,1]+dx[i];
ny:=dui[head,2]+dy[i];
if (nx>0)and(nx<=h)and(ny>0)and(ny<=w) then
begin
if gr[nx,ny]<>1 then
begin
gr[nx,ny]:=1;
inc(sum);
inc(tail);
dui[tail,1]:=nx;
dui[tail,2]:=ny;
end;{then}
end;{then}
end;{for-i}
inc(head);
end;{while}
end;{find}
begin{main}
readln(w,h);
while (w<>0)and(h<>0) do
begin
for i:=1 to h do
begin
readln(s);
for j:=1 to w do
begin
if s[j]='.' then gr[i,j]:=0;
if s[j]='#' then gr[i,j]:=1;
if s[j]='@' then
begin
x:=i;
y:=j;
gr[i,j]:=1;
sum:=1;
end;{then}
end;{for-j}
end;{for-i}
find(x,y);
writeln(sum);
readln(w,h);
end;{while}
end.
/**************************************************************
Problem: 2126
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/