// Property Distribution
#include <iostream>
#define MAX_H   100
#define MAX_W   100
using namespace std;

int H, W;
char field[MAX_H][MAX_W];

// 現在位置(x, y)
void dfs(int x, int y) {
	char mark = field[x][y];
	// 今いるところを.に置き換える
	field[x][y] = '.';

	// 移動する4方向をループ
	for (int dx = -1; dx <= 1; dx++) {
		int nx = x + dx;
		if (0 <= nx && nx < H && field[nx][y] == mark) {
			dfs(nx, y);
		}
	}
	for (int dy = -1; dy <= 1; dy++) {
		int ny = y + dy;
		if (0 <= ny && ny < W && field[x][ny] == mark) {
			dfs(x, ny);
		}
	}
	return;
}

int main(void) {
	int count = 0;
	int i, j;
	cin >> H >> W;
	for (i = 0; i < H; i++) {
		for (j = 0; j < W; j++) {
			cin >> field[i][j];
		}
	}

	for (i = 0; i < H; i++) {
		for (j = 0; j < W; j++) {
			if (field[i][j] != '.') {
				dfs(i, j);
				count++;
			}
		}
	}
	cout << count << endl;

	return 0;
}