#include<iostream>
#include<cstring>
using namespace std;
char G[105][105];
int flag[105][105];
int H, W, ans;
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};

void dfs(int a, int b, char ch){
	flag[a][b] = 1;
	for(int i = 0; i < 4; i++){
		int nx = a + dx[i], ny = b + dy[i];
		if(nx >= 0 && nx < H && ny >= 0 && ny < W && flag[nx][ny] == 0 && G[nx][ny] == ch){
			dfs(nx, ny, ch);
		}	
	}
}

int main(){
	while(scanf("%d%d", &H, &W) != EOF && H && W){
		ans = 0;
		memset(flag, 0, sizeof(flag));
		for(int i = 0; i < H; i++){
			for(int j = 0; j < W; j++){
				cin >> G[i][j];
			}
		}
		for(int i = 0; i < H; i++){
			for(int j = 0; j < W; j++){
				if(flag[i][j] == 0){
					ans++;
					dfs(i, j, G[i][j]);
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}