#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;

int W, H;

string field[100];

bool visit[100][100];

void dfs(int y, int x) {
	visit[y][x] = true;
	static int dy[4] = {0, 1, 0, -1};
	static int dx[4] = {1, 0, -1, 0};

	for(int i = 0; i < 4; i++) {
		int ny = y + dy[i];
		int nx = x + dx[i];
		if(0 <= ny && ny < H && 0 <= nx && nx < W && visit[ny][nx] == false && field[y][x] == field[ny][nx]) {
			dfs(ny, nx);
		}
	}
}

void pv() {
	cerr << endl;
	cerr << "-----"<< endl;
	for(int y = 0; y < H; y++) {
		for(int x = 0; x < W; x++) {
			cerr << visit[y][x];
		}
		cerr << endl;
	}

	cerr << "-----"<< endl;
}

int main() {
	for(;cin >> W >> H, W || H;) {
		for(int y = 0; y < H; y++)
			cin >> field[y];

		memset(visit, 0, sizeof visit);

		int ans = 0;
		for(int y = 0; y < H; y++) {
			for(int x = 0; x < W; x++) {
				if(visit[y][x] == false) {
					ans++;
					dfs(y, x);
				}
			}
		}

		cout << ans << endl;
	}
}