#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 110;
char map[MAXN][MAXN];
int dir[8][2]={ {-1, -1},{-1, 0},{-1, 1},{0, 1},{1, 1},{1, 0},{1, -1},{0, -1} };
int n,m;
void dfs(int x,int y)
{
map[x][y] = '*';
for (int i = 0 ; i < 8 ; i++)
{
int nx = x + dir[i][0];
int ny = y + dir[i][1];
if ( nx < 1 || nx > n || ny < 1 || ny > m )
continue ;
if (map[nx][ny] == '*' )
continue ;
dfs(nx,ny);
}
}
int main()
{
while (scanf("%d%d",&n,&m) != EOF )
{
if(m == 0 && n == 0 )
break;
getchar();
for (int i = 1 ; i <= n ; i++)
scanf("%s",map[i]+1); //起初挨个字符读,忘了会把行末的回车读到,还有我们是从第一列开始读的,所以+1
int count = 0 ;
for (int i = 1 ; i <= n ; i++)
for (int j = 1 ; j <= m ; j++)
{
if (map[i][j] == '@')
{
dfs(i,j);
count++;
}
}
printf("%d\n",count);
}
return 0;
}