#include <iostream>
using namespace std;

int H, W;
char field[101][101];
int dh[4] = {1, 0, -1, 0}, dw[4] = {0, 1, 0, -1}; //上下左右の四方向のみ探索するため

//動的計画法
void dfs(int h, int w){
    char base = field[h][w];
    field[h][w] = '.'; //探索済みの印

    for(int i = 0; i < 4; i++){
        int nh = h + dh[i];
        int nw = w + dw[i];

        //場外アウトまたはbaseと同じ果物でなければ
        if(nh < 0 || nh > H || nw < 0 || nw > W) continue;
        if(field[nh][nw] != base) continue;
        dfs(nh, nw);
    }

    /*char u = field[h - 1][w];
    char d = field[h + 1][w];
    char l = field[h][w - 1];
    char r = field[h][w + 1];

    if(field[h - 1][w] == base) dfs(h - 1, w);
    if(field[h + 1][w] == base) dfs(h + 1, w);
    if(field[h][w - 1] == base) dfs(h, w - 1);   
    if(field[h][w + 1] == base) dfs(h, w + 1); */
}

int main(void){
    while(cin >> H >> W){
        if(H + W == 0) break;

        //果樹園の地図を作成する
        for(int i = 0; i < H; i++){
            for(int j = 0; j < W; j++){
                cin >> field[i][j];
            }
        }

        //探索開始
        int c = 0; //分配後の区画数
        for(int i = 0; i < H; i++){
            for(int j = 0; j < W; j++){
                //場外アウトならば、それ以降は実行せずスルー
                if(field[i][j] == '.') continue;
                dfs(i, j);
                c++;
            }
        }
        cout << c << endl;
    }
}

