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