#include <stdio.h>

int main(){
	int i,j,k;
	char c[21];
	int w,h;
	int map[22][22];
	int mapindex[22*22];
	int map_now,mapindex_now;
	
	while(1){
		scanf("%d %d",&w,&h);
		if(w==0){
			break;
		}
		for(i=0;i<22;i++){
			for(j=0;j<22;j++){
				map[i][j]=-1;
				mapindex[i*w+j]=0;
			}
		}
		for(j=0;j<=h;j++){
			gets(c);
			if(j!=0){
				for(i=1;i<=w;i++){
					switch(c[i-1]){
						case '#':map[i][j]=-1;break;
						case '@':map[i][j]=1;mapindex[1]=i+j*(w+1);break;
						case '.':map[i][j]=0;break;
						default :break;
					}
				}
			}
		}
		/*
		for(j=0;j<22;j++){
			for(i=0;i<22;i++){
				printf("%2d",map[i][j]);
			}
			printf("\n");
		}*/
		
		map_now=1;
		mapindex_now=1;
		while(mapindex[mapindex_now]!=0){
			int x=(mapindex[mapindex_now]-1)%(w+1)+1;
			int y=mapindex[mapindex_now]/(w+1);
			for(i=0;i<4;i++){
				if(i==0){
					if(map[x-1][y]==0){
						map_now++;
						map[x-1][y]=map_now;
						mapindex[map_now]=(x-1)+y*(w+1);
					}
				}else if(i==1){
					if(map[x+1][y]==0){
						map_now++;
						map[x+1][y]=map_now;
						mapindex[map_now]=(x+1)+y*(w+1);
					}
				}else if(i==2){
					if(map[x][y-1]==0){
						map_now++;
						map[x][y-1]=map_now;
						mapindex[map_now]=x+(y-1)*(w+1);
					}
				}else if(i==3){
					if(map[x][y+1]==0){
						map_now++;
						map[x][y+1]=map_now;
						mapindex[map_now]=x+(y+1)*(w+1);
					}
				}
			}
			mapindex_now++;
		}
		printf("%d\n",mapindex_now-1);
		/*for(j=0;j<22;j++){
			for(i=0;i<22;i++){
				printf("%2d",map[i][j]);
			}
			printf("\n");
		}
		for(i=0;i<10;i++){
			for(j=0;j<10;j++){
				printf("%d\n",mapindex[i*w+j]);
			}
			printf("\n");
		}*/
	}
	return 0;
}