#include<stdio.h>
#define MAXN 40
char maze[MAXN][MAXN];//代表迷宫
int vis[MAXN][MAXN];//标记数组
int mov[][2]={{0,-1},{-1,0},{0,1},{1,0}};//移动方向
int N,M,count;//N代表行数,M代表列数,count用来计数
void dfs(int x,int y)//深搜
{
int i,x1,y1;
vis[x][y]=1;//起始点标记,如果起始点不标记,之后搜索会回来造成错误
for(i=0;i<4;i++)
{
x1=x+mov[i][0];
y1=y+mov[i][1];
if(x1<0||x1>=N||y1<0||y1>=M||vis[x1][y1]||maze[x1][y1]=='#')
continue;
vis[x1][y1]=1;//搜索到一个可以走的点,标记,下次不再走
count++;//数目加一
dfs(x1,y1);
}
return ;
}
int main(void)
{
int i,j,sx,sy;
while(~scanf("%d%d",&M,&N)&&(N!=0||M!=0))
{
memset(vis,0,sizeof(vis));
count=1;//计数算上起始点,所以一开始数目是一
for(i=0;i<N;i++)
{
scanf("%s",maze[i]);
}
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
if(maze[i][j]=='@')
{
sx=i;
sy=j;
}
}
}
dfs(sx,sy);
printf("%d\n",count);
}
}