/*简单BFS搜索----http://acm.hrbeu.edu.cn/index.php?act=problem&id=1004&cid=18*/
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct Q{
int x,y;
};
int dir[4][2]={1,0,-1,0,0,1,0,-1};
char map[105][105];
char str[105];
void bfs(int a,int b,int n,int m){
int i,x,y;
queue<Q> q;
Q now,temp;
temp.x=a;
temp.y=b;
map[a][b]='*';
q.push(temp);
while(!q.empty()){
now=q.front();
q.pop();
for(i=0;i<4;i++){
x=now.x+dir[i][0];
y=now.y+dir[i][1];
if(x<1||x>n||y<1||y>m||map[x][y]=='*')
continue;
temp.x=x;
temp.y=y;
map[x][y]='*';
q.push(temp);
}
}
}
int main(){
int i,j,n,m,count;
while(~scanf("%d%d",&n,&m)&&m){
count=0;
for(i=1;i<=n;i++){
scanf("%s",str);
for(j=1;j<=m;j++)
map[i][j]=str[j-1];
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(map[i][j]=='@'){
bfs(i,j,n,m);
count++;
}
printf("%d\n",count);
}
return 0;
}