#include<stdio.h>
#include<string.h>
#define Max(x,y)((x>y)?x:y)
char m[22][22];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
typedef struct p{
	int x,y;
}P;
P q[405],sq[405];
int main(){
	int i,j,w,h,qn,sqn,ans,nx,ny;
	char s[22];
	while(1){
		scanf("%d%d",&w,&h);
		if(w==0)break;
		memset(m,0,sizeof(m));
		for(i=0;i<=w+1;i++)m[0][i]=m[h+1][i]='#';
		for(i=1;i<=h;i++){
			scanf("%s",s);
			strcpy(m[i]+1,s);
			m[i][0]=m[i][w+1]='#';
			for(j=1;j<=w;j++)if(m[i][j]=='@')q[0].x=j,q[0].y=i,m[i][j]='#';
		}
		ans=1;qn=1;
		while(qn!=0){
			sqn=0;
			for(i=0;i<qn;i++){
				for(j=0;j<4;j++){
					nx=q[i].x+dx[j];
					ny=q[i].y+dy[j];
					if(m[ny][nx]=='.'){
						sq[sqn].x=nx;
						sq[sqn].y=ny;
						ans++;sqn++;
						m[ny][nx]='#';
					}
				}
			}
			memcpy(q,sq,sizeof(P)*sqn);
			qn=sqn;
		}
		//for(i=0;i<=h+1;i++)printf("%s\n",m[i]);
		printf("%d\n",ans);
	}
	return 0;
}