#include <iostream>
using namespace std;

int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
char map[105][105];  //H <= 100, W <= 100
int h, w, vis[105][105];

void dfs(int x, int y, char c)
{
    int i, xx, yy;

    for(i = 0; i < 4; i++)
    {
        xx = x + dx[i];
        yy = y + dy[i];
        
        if(xx >= 0 && xx < h && yy >= 0 && yy < w && !vis[xx][yy] && map[xx][yy] == c)  //?找相同区域?char相同
        {
            vis[xx][yy] = 1;  //搜索的?置?1以防下次搜索?区域
            dfs(xx, yy, c);
        }
    }
}

int main()
{
    int i, j, ans;

    while(scanf("%d%d", &h, &w) && (h || w))
    {
        getchar();  //?行考?

        for(i = 0; i < h; i++) scanf("%s", map[i]);  //按行?取
        memset(vis, 0, sizeof vis);  //vis全部元素置?0，即初始化数?
        ans = 0;

        for(i = 0; i < h; i++)
        {
            for(j = 0; j < w; j++)
            {
                if(!vis[i][j])
                {
                    ans++;  //一?始就是一个区域
                    dfs(i, j, map[i][j]);  //深度搜索
                }
            }
        }
        printf("%d\n", ans);
    }

    return 0;
}

/*
??附?
在H*W的矩形果?里有苹果、梨、蜜柑三?果?，相?（上下左右）的同?果?属于同一个区域，?出果?的果?分布，求?共有多少个区域。
（原?的??中苹果?リ，梨?カ，蜜柑?ミ， ?中共10个区域） 
?入：
多?数据，??数据第一行??个整数H、W（H <= 100, W <= 100）， H =0 且 W = 0代表?入?束。
以下H行W列表示果?的果?分布，苹果是@，梨是#， 蜜柑是*。
?出：
?于??数据，?出其区域的个数。
*/