#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int h,w;//h:行，w:列
char garden[110][110];
int dirx[4]={-1,0,1,0};
int diry[4]={0,1,0,-1};
int area;
void DFS(int dx,int dy)
{
    int x,y;
    if(garden[dx][dy]=='#')
    {
        garden[dx][dy]='^';
        for(int i=0;i<4;i++)
        {
            x=dx+dirx[i];
            y=dy+diry[i];
            if(x>=0&&x<h&&y>=0&&y<w&&garden[x][y]=='#')
                DFS(x,y);
        }
    }
    else if(garden[dx][dy]=='*')
    {
        garden[dx][dy]='^';
        for(int i=0;i<4;i++)
        {
            x=dx+dirx[i];
            y=dy+diry[i];
            if(x>=0&&x<h&&y>=0&&y<w&&garden[x][y]=='*')
                DFS(x,y);
        }
    }
    else if(garden[dx][dy]=='@')
    {
        garden[dx][dy]='^';
        for(int i=0;i<4;i++)
        {
            x=dx+dirx[i];
            y=dy+diry[i];
            if(x>=0&&x<h&&y>=0&&y<w&&garden[x][y]=='@')
                DFS(x,y);
        }
    }
}
void solve()
{
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++)
        {
            if(garden[i][j]=='#')
            {
                DFS(i,j);
                area++;
            }
            else if(garden[i][j]=='*')
            {
                DFS(i,j);
                area++;
            }
            else if(garden[i][j]=='@')
            {
                DFS(i,j);
                area++;
            }
        }
    }
}
int main()
{
    while(scanf("%d%d",&h,&w))
    {
        getchar();
        if(w==0&&h==0)
            break;
        for(int i=0;i<h;i++)
        {
            for(int j=0;j<w;j++)
            {
                scanf("%c",&garden[i][j]);
            }
            getchar();
        }
        area=0;
        solve();
        printf("%d\n",area);
    }
    return 0;
}

