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
****************************************************************/