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