#include<iostream>
using namespace std;
const int N=110;
int dx[8]={-1,0,1,1,-1,-1,0,1};
int dy[8]={-1,-1,-1,0,0,1,1,1};
int m,n;
char mat[N][N];
bool visit[N][N];
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&mat[yy][xx]=='@'&&!visit[yy][xx])
{
visit[yy][xx]=true;
dfs(xx,yy);
}
}
}
int main()
{
while(scanf("%d%d",&m,&n),m!=0)
{
memset(visit,0,sizeof(visit));
memset(mat,0,sizeof(mat));
char tmp;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
while(tmp=getchar(),tmp!='*'&&tmp!='@');
mat[i][j]=tmp;
}
}
int ans=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(mat[i][j]=='@'&&!visit[i][j])
{
ans++;
visit[i][j]=true;
dfs(j,i);
}
printf("%d\n",ans);
}
return 0;
}
using namespace std;
const int N=110;
int dx[8]={-1,0,1,1,-1,-1,0,1};
int dy[8]={-1,-1,-1,0,0,1,1,1};
int m,n;
char mat[N][N];
bool visit[N][N];
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&mat[yy][xx]=='@'&&!visit[yy][xx])
{
visit[yy][xx]=true;
dfs(xx,yy);
}
}
}
int main()
{
while(scanf("%d%d",&m,&n),m!=0)
{
memset(visit,0,sizeof(visit));
memset(mat,0,sizeof(mat));
char tmp;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
while(tmp=getchar(),tmp!='*'&&tmp!='@');
mat[i][j]=tmp;
}
}
int ans=0;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
if(mat[i][j]=='@'&&!visit[i][j])
{
ans++;
visit[i][j]=true;
dfs(j,i);
}
printf("%d\n",ans);
}
return 0;
}