#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#define max 105
using namespace std;
char ch[max][max];
int mat[max][max]={0};
int mark[max][max]={0};
int marking,m,n;
queue<int> qi,qj;
void push_queue(int i,int j){
qi.push(i);
qj.push(j);
}
void pop_queue(){
qi.pop();
qj.pop();
}
void checkadj(int i,int j) {
mat[i][j] = 0;
mark[i][j] = 1;
if(mat[i-1][j] == 1 && mark[i-1][j]==0) {
mark[i][j] = 1;
mat[i][j] = 0;
push_queue(i-1,j);
}
if(mat[i-1][j-1] == 1 && mark[i-1][j-1] == 0) {
mark[i-1][j-1] = 1;
mat[i-1][j-1] = 0;
push_queue(i-1,j-1);
}
if(mat[i-1][j+1] == 1 && mark[i-1][j+1] == 0) {
mark[i-1][j+1] = 1;
mat[i-1][j+1] = 0;
push_queue(i-1,j+1);
}
if(mat[i][j-1] == 1 && mark[i][j-1] == 0) {
mark[i][j-1] = 1;
mat[i][j-1] = 0;
push_queue(i,j-1);
}
if(mat[i][j+1] == 1 && mark[i][j+1] == 0) {
mark[i][j+1] = 1;
mat[i][j+1] = 0;
push_queue(i,j+1);
}
if(mat[i+1][j-1] == 1 && mark[i+1][j-1] == 0) {
mark[i+1][j-1] = 1 ;
mat[i+1][j-1] = 0 ;
push_queue(i+1,j-1);
}
if(mat[i+1][j] == 1 && mark[i+1][j] == 0) {
mark[i+1][j] = 1;
mat[i+1][j] = 0;
push_queue(i+1,j);
}
if(mat[i+1][j+1] == 1 && mark[i+1][j+1] == 0) {
mark[i+1][j+1] = 1;
mat[i+1][j+1] = 0;
push_queue(i+1,j+1);
}
}
void traverse(int i,int j) {
int ti,tj,x,y;
push_queue(i,j);
while(!qi.empty() && !qj.empty()) {
ti= qi.front();
tj= qj.front();
pop_queue();
checkadj(ti,tj);
}
}
void exploregrid() {
int x,y;
for(x=1;x<=m;x++){
for(y=1;y<=n;y++){
if(mat[x][y] == 1) {
traverse(x,y);
marking++;
}
}
}
}
int main(){
int i,j;
while(1) {
scanf("%d%d",&m,&n);
if(m==0 && n==0) break;
for(i=0;i<m;i++){
scanf("%s",ch[i]);
}
for(i=0;i<=4;i++) mat[0][i]=0;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++) {
if(ch[i-1][j-1]=='@') mat[i][j]=1;
else mat[i][j]=0;
}
}
m=m+1;
for(i=0;i<=4;i++) mat[m][i]=0;
n=n+1;
/* for(i=0;i<=m;i++){
for(j=0;j<=n;j++) {
cout<<mat[i][j]<<" ";
}
printf("\n");
}
*/
marking=0;
exploregrid();
printf("%d\n",marking);
/* for(i=1;i<=m;i++)
for(j=1;i<=n;j++)
mat[i][j] = mark[i][j] = 0; */
memset(mat,0,sizeof(mat));
memset(mark,0,sizeof(mark));
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdGRpbz4KI2luY2x1ZGU8Y3N0ZGxpYj4KI2luY2x1ZGU8Y3N0cmluZz4KI2luY2x1ZGU8cXVldWU+CiNkZWZpbmUgbWF4IDEwNQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2hhciBjaFttYXhdW21heF07CmludCBtYXRbbWF4XVttYXhdPXswfTsKaW50IG1hcmtbbWF4XVttYXhdPXswfTsKaW50IG1hcmtpbmcsbSxuOwpxdWV1ZTxpbnQ+IHFpLHFqOwoKdm9pZCBwdXNoX3F1ZXVlKGludCBpLGludCBqKXsKICAgICAgIHFpLnB1c2goaSk7CiAgICAgICBxai5wdXNoKGopOwp9Cgp2b2lkIHBvcF9xdWV1ZSgpewogICBxaS5wb3AoKTsKICAgcWoucG9wKCk7ICAgIAp9Cgp2b2lkIGNoZWNrYWRqKGludCBpLGludCBqKSB7CiAgICAgbWF0W2ldW2pdID0gMDsKICAgICBtYXJrW2ldW2pdID0gMTsKICAgICBpZihtYXRbaS0xXVtqXSA9PSAxICYmIG1hcmtbaS0xXVtqXT09MCkgewogICAgICAgbWFya1tpXVtqXSA9IDE7CiAgICAgICBtYXRbaV1bal0gPSAwOwogICAgICAgcHVzaF9xdWV1ZShpLTEsaik7CiAgICAgfQoKICAgICBpZihtYXRbaS0xXVtqLTFdID09IDEgJiYgbWFya1tpLTFdW2otMV0gPT0gMCkgewogICAgICAgbWFya1tpLTFdW2otMV0gPSAxOwogICAgICAgbWF0W2ktMV1bai0xXSA9IDA7CiAgICAgICBwdXNoX3F1ZXVlKGktMSxqLTEpOwogICAgIH0KICAgICAKICAgICBpZihtYXRbaS0xXVtqKzFdID09IDEgJiYgbWFya1tpLTFdW2orMV0gPT0gMCkgewogICAgICAgbWFya1tpLTFdW2orMV0gPSAxOwogICAgICAgbWF0W2ktMV1baisxXSA9IDA7CiAgICAgICBwdXNoX3F1ZXVlKGktMSxqKzEpOwogICAgIH0KCiAgICAgaWYobWF0W2ldW2otMV0gPT0gMSAmJiBtYXJrW2ldW2otMV0gPT0gMCkgewogICAgICAgbWFya1tpXVtqLTFdID0gMTsKICAgICAgIG1hdFtpXVtqLTFdID0gMDsgICAgICAgCiAgICAgICBwdXNoX3F1ZXVlKGksai0xKTsKICAgICB9CgogICAgIGlmKG1hdFtpXVtqKzFdID09IDEgJiYgbWFya1tpXVtqKzFdID09IDApIHsKICAgICAgIG1hcmtbaV1baisxXSA9IDE7CiAgICAgICBtYXRbaV1baisxXSA9IDA7ICAgICAgIAogICAgICAgcHVzaF9xdWV1ZShpLGorMSk7CiAgICAgfQoKICAgICBpZihtYXRbaSsxXVtqLTFdID09IDEgJiYgbWFya1tpKzFdW2otMV0gPT0gMCkgewogICAgICAgbWFya1tpKzFdW2otMV0gPSAxIDsKICAgICAgIG1hdFtpKzFdW2otMV0gPSAwIDsgICAgICAgCiAgICAgICBwdXNoX3F1ZXVlKGkrMSxqLTEpOwogICAgIH0KCiAgICAgaWYobWF0W2krMV1bal0gPT0gMSAmJiBtYXJrW2krMV1bal0gPT0gMCkgewogICAgICAgbWFya1tpKzFdW2pdID0gMTsKICAgICAgIG1hdFtpKzFdW2pdID0gMDsgICAgICAgCiAgICAgICBwdXNoX3F1ZXVlKGkrMSxqKTsKICAgICB9CgogICAgIGlmKG1hdFtpKzFdW2orMV0gPT0gMSAmJiBtYXJrW2krMV1baisxXSA9PSAwKSB7CiAgICAgICBtYXJrW2krMV1baisxXSA9IDE7CiAgICAgICBtYXRbaSsxXVtqKzFdID0gMDsgICAgICAgCiAgICAgICBwdXNoX3F1ZXVlKGkrMSxqKzEpOwogICAgIH0KfQoKdm9pZCB0cmF2ZXJzZShpbnQgaSxpbnQgaikgewogICBpbnQgdGksdGoseCx5OwogICBwdXNoX3F1ZXVlKGksaik7CiAgIHdoaWxlKCFxaS5lbXB0eSgpICYmICFxai5lbXB0eSgpKSB7CiAgICAgICAgIHRpPSBxaS5mcm9udCgpOwogICAgICAgICB0aj0gcWouZnJvbnQoKTsKICAgICAgICAgcG9wX3F1ZXVlKCk7CiAgICAgICAgIGNoZWNrYWRqKHRpLHRqKTsKICAgfSAgCn0KCnZvaWQgZXhwbG9yZWdyaWQoKSB7CiAgIGludCB4LHk7CiAgIGZvcih4PTE7eDw9bTt4KyspewogICAgIGZvcih5PTE7eTw9bjt5KyspewogICAgICAgIGlmKG1hdFt4XVt5XSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlKHgseSk7CiAgICAgICAgICAgICAgICAgICAgIG1hcmtpbmcrKzsKICAgICAgICB9CiAgICAgfSAgICAgICAgCiAgIH0KfQoKaW50IG1haW4oKXsKICAgIGludCBpLGo7CiAgICB3aGlsZSgxKSB7CiAgICAgIHNjYW5mKCIlZCVkIiwmbSwmbik7CiAgICAgIGlmKG09PTAgJiYgbj09MCkgYnJlYWs7CiAgICAgIGZvcihpPTA7aTxtO2krKyl7CiAgICAgICAgICBzY2FuZigiJXMiLGNoW2ldKTsgICAKICAgICAgfQogICAgICBmb3IoaT0wO2k8PTQ7aSsrKSBtYXRbMF1baV09MDsKICAgICAgZm9yKGk9MTtpPD1tO2krKyl7CiAgICAgICAgZm9yKGo9MTtqPD1uO2orKykgewogICAgICAgICAgIGlmKGNoW2ktMV1bai0xXT09J0AnKSBtYXRbaV1bal09MTsgICAKICAgICAgICAgICBlbHNlIG1hdFtpXVtqXT0wOwogICAgICAgIH0gICAgICAgICAgICAgICAKICAgICAgfQogICAgICBtPW0rMTsKICAgICAgIGZvcihpPTA7aTw9NDtpKyspIG1hdFttXVtpXT0wOwogICAgICBuPW4rMTsKICAgIC8qICBmb3IoaT0wO2k8PW07aSsrKXsKICAgICAgICBmb3Ioaj0wO2o8PW47aisrKSB7CiAgICAgICAgICAgY291dDw8bWF0W2ldW2pdPDwiICI7ICAgCiAgICAgICAgfSAgICAgICAgICAgICAgIAogICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgfQoqLwogICAgICBtYXJraW5nPTA7CiAgICAgIGV4cGxvcmVncmlkKCk7CiAgICAgIHByaW50ZigiJWRcbiIsbWFya2luZyk7CiAgICAvKiAgZm9yKGk9MTtpPD1tO2krKykgCiAgICAgICAgZm9yKGo9MTtpPD1uO2orKykKICAgICAgICAgICBtYXRbaV1bal0gPSBtYXJrW2ldW2pdID0gMDsgICAgICAgICAgICAgICAgICAqLwogICAgICBtZW1zZXQobWF0LDAsc2l6ZW9mKG1hdCkpOwptZW1zZXQobWFyaywwLHNpemVvZihtYXJrKSk7CiAgICB9CiAgICByZXR1cm4gMDsgICAgICAgICAKfQo=