#include<stdio.h>
#define MAX 20
int main()
{
  char c[MAX][MAX];
  int checked[MAX][MAX];
  int able[MAX][MAX];
  int x,y;
  int checkingx,checkingy;
  int i,j;
  int flag;
  int result;
  while(1)
    {
      for(i=0;i<MAX;i++)
	for(j=0;j<MAX;j++)
	  checked[i][j]=able[i][j]=0;
      scanf("%d%d",&x,&y);
      if((!x)&&(!y)) break;
      for(i=0;i<y;i++)
	for(j=0;j<x;j++)
	  {
	    scanf("%c",&c[j][i]);
	    if(c[j][i]=='@')
	      {
		checkingx=j;
		checkingy=i;
		checked[j][i]=1;
		able[j][i]=1;
	      }
	    if(c[j][i]=='\n')
	      {
		j--;
		continue;
	      }
	  }
      

      
      while(1)
	{
	  /*
	  for(i=0;i<y;i++)
	    {
	      for(j=0;j<x;j++)
		{
		  printf("%c",c[j][i]);
		}
	      printf("\n");
	    }
	  */
	  if((checkingx>0)&&(c[checkingx-1][checkingy]=='.'))
	    {
	      able[checkingx-1][checkingy]=1;
	      //printf("able: %d,%d\n",checkingx-1,checkingy);
	    }
	  if((checkingx<x-1)&&(c[checkingx+1][checkingy]=='.'))
	    {
	      able[checkingx+1][checkingy]=1;
	      //printf("able: %d,%d\n",checkingx+1,checkingy);
	    }
	  if((checkingy>0)&&(c[checkingx][checkingy-1]=='.'))
	    {
	      able[checkingx][checkingy-1]=1;
	      //printf("able: %d,%d\n",checkingx,checkingy-1);
	    }
	  if((checkingy<y-1)&&(c[checkingx][checkingy+1]=='.'))
	    {
	      able[checkingx][checkingy+1]=1;
	      //printf("able: %d,%d\n",checkingx,checkingy+1);
	    }
	  flag=0;
	  for(i=0;i<y;i++)
	    {
	      for(j=0;j<x;j++)
		{
		  if((checked[j][i]==0)&&(able[j][i]==1))
		    {
		      checkingx=j;
		      checkingy=i;
		      checked[j][i]=1;
		      flag=1;
		      //printf("NEXT: %d,%d\n",j,i);
		      break;
		    }
		}
	      if(flag) break;
	    }
	  if(!flag) break;
	}
      result=0;
      for(i=0;i<y;i++)
	for(j=0;j<x;j++)
	  if(checked[j][i]==1) result++;
      printf("%d\n",result);
    }
  return 0;
}