#include<bits/stdc++.h>
using namespace std;
char a[105][105];
bool inq[105][105];
int ans,n,m;
int dr[][2]={{-1,-1},{-1,0},{-1,1},
{0,-1},{0,1},
{1,-1},{1,0},{1,1}};
struct node{
int x,y;
}Node;
bool check(int x,int y){
if(x<0||x>=m||y<0||y>=n||inq[x][y]||a[x][y]=='*') return false;//
return true;
}
void BFS(){
queue<node>q;
q.push(Node);
while(!q.empty()){
node top=q.front();
q.pop();
for(int i=0;i<8;++i){
int newX=top.x+dr[i][0];
int newY=top.y+dr[i][1];
if(check(newX,newY)) {
//cout<<newX<<" "<<newY<<endl;
q.push({newX,newY});
inq[newX][newY]=true;//
}
}
}
}
int main(){
while(cin>>m>>n&&m){
memset(a,0,sizeof(a));
memset(inq,0,sizeof(inq));
ans=0;
for(int i=0;i<m;++i){
cin>>a[i];
}
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){
if(a[i][j]=='@'&&inq[i][j]==false){//
ans++;
Node.x=i,Node.y=j;
inq[i][j]=true;
BFS();
}
}
}
cout<<ans<<endl;
}
}