// 2004国内予選 問題B
#include <stdio.h>
#define N 30
//再帰呼び出しも用いた探索
void search(int room[N][N], int w, int h, int x, int y, int *ct)
{
int i;
if(x<0 || x>=w || y<0 || y>=h || room[x][y]==1){
return;
}
//printf("(%d,%d)\n", x, y);
(*ct)++;
room[x][y]=1;
search(room, w, h, x-1, y, ct);
search(room, w, h, x, y-1, ct);
search(room, w, h, x+1, y, ct);
search(room, w, h, x, y+1, ct);
}
int main(void)
{
int w,h,x,y,sx,sy,ct;
int room[N][N];
char line[N];
while(1){
fgets(line, N, stdin);
sscanf(line, "%d %d", &w, &h);
//printf("%d %d ", w, h);
if(w==0 && h==0) break;
for(y=0; y<h; y++){
fgets(line, N, stdin);
//printf("%d %s\n", y, line);
for(x=0; x<w; x++){
if(line[x]=='.'){
room[x][y]=0;
}else if(line[x]=='#'){
room[x][y]=1;
}else if(line[x]=='@'){
room[x][y]=0;
sx=x; sy=y; // 最初の位置
}
}
}
//printf("sx=%d, sy=%d\n", sx, sy);
/*
// データ確認
for(y=0; y<h; y++){
for(x=0; x<w; x++){
printf("%d", room[x][y]);
}
printf("\n");
}
*/
ct=0;
search(room, w, h, sx, sy, &ct);
printf("%d\n", ct);
}
return(0);
}