#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
int h, w, cnt;
char map[105][105];
int mark[105][105];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
void DFS(int x, int y, char target)
{
    mark[x][y] = cnt;

    for(int i = 0; i < 4; i++)
    {
        int tx = x + dx[i];
        int ty = y + dy[i];

        if(tx >= 0 && tx < h && ty >= 0 && ty < w && !mark[tx][ty] && map[tx][ty] == target)
            DFS(tx, ty, target);
    }

    return;
}
int main(void)
{
    while(scanf("%d%d", &h, &w) != EOF)
    {
        if(h == 0 && w == 0)
            break;

        for(int i = 0; i < h; i++)
            scanf("%s", map[i]);

        cnt = 0;
        memset(mark, 0, sizeof(mark));

        for(int i = 0; i < h; i++)
            for(int j = 0; j < w; j++)
        {
            if(!mark[i][j])
            {
                cnt++;
                DFS(i, j, map[i][j]);
            }
        }

        printf("%d\n", cnt);
    }

	return 0;
}

