#include <iostream>
#define MAX_N 100
#define MAX_M 100
using namespace std;
int N, M;
char field[MAX_N][MAX_M];
int dx[4] = {1,0,-1,0}, dy[4] = {0,1,0,-1};
char fruit;
void dfs(int x, int y)
{
field[x][y] = 'F';
for(int i = 0; i < 4; i++)
{
int nx = x + dx[i], ny = y + dy[i];
if(0 <= nx && nx < N && 0 <= ny && ny < M && field[nx][ny] == fruit)
dfs(nx,ny);
}
return;
}
void solve()
{
int res = 0;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
if(field[i][j] == '#' || field[i][j] == '@' || field[i][j] == '*')
{
fruit = field[i][j];
dfs(i,j);
res++;
}
}
}
cout << res << endl;
}
int main()
{
cin >> N >> M;
while((N + M) != 0)
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
cin >> field[i][j];
}
}
solve();
cin >> N >> M;
}
return 0;
}