#include<iostream>
#include<cstdio>
#include<fstream>
#include<queue>
#include<vector>
#include<cstring>
#define MAX 110
#define INF 10000000

using namespace std;

int H, W;
char orc[MAX][MAX]; //存数据 
bool map[MAX][MAX];//标记是否使用过 

//深搜
int dfs(int x, int y, char a){
	int xi[4] = {-1,1,0,0};
	int yi[4] = {0,0,-1,1};
	//上下左右四个方向遍历
	for(int i=0; i<4; i++){
		int A = x+xi[i];
		int B = y+yi[i];
		//有a，标记统计过 
		if(orc[A][B]==a && !map[A][B] && A>=0 && B>=0 && A<H && B<W){
			map[A][B] = true;
			dfs(A, B, a);
		} 	
	} 
}

//测试函数 
int main(){
	
	while(cin >> H >> W){
		int res = 0; 
		for(int i=0; i<H; i++)
			for(int j=0; j<W; j++)
				map[i][j] = false;
		if(H == 0 && W == 0)break;
		for(int i=0; i<H; i++)
			for(int j=0; j<W; j++)
				cin >> orc[i][j];
		//遍历orc
		for(int i=0; i<H; i++)
			for(int j=0; j<W; j++){
				//苹果 
				if(orc[i][j] == '@' && !map[i][j]){
					dfs(i, j, '@');
					res++;
				}
				//梨 
				if(orc[i][j] == '#' && !map[i][j]){
					dfs(i, j, '#');
					res++;
				}
				//蜜柑 
				if(orc[i][j] == '*' && !map[i][j]){
					dfs(i, j, '*');
					res++;
				}
			}
		cout << res << endl;		
	}
	
	return 0;
} 
