//2013/10/04

#include <iostream>
using namespace std;


char F[102][102];

void APPLE(int Y, int X)
{
	if(F[Y][X] !='@')
		return;

	F[Y][X] = '.';
	APPLE(Y-1, X);	//上
	APPLE(Y, X+1);	//右
	APPLE(Y+1, X);	//下
	APPLE(Y, X-1);	//左

}
void KAKI(int Y, int X)
{
	if(F[Y][X] !='#')
		return;

	F[Y][X] = '.';
	KAKI(Y-1, X);	//上
	KAKI(Y, X+1);	//右
	KAKI(Y+1, X);	//下
	KAKI(Y, X-1);	//左
}
void ORANGE(int Y, int X)
{
	if(F[Y][X] !='*')
		return;

	F[Y][X] = '.';
	ORANGE(Y-1, X);	//上
	ORANGE(Y, X+1);	//右
	ORANGE(Y+1, X);	//下
	ORANGE(Y, X-1);	//左
}
int main()
{
	int H, W;
	while(true){
		cin >> H >> W;
		if(H==0 && W==0)
			break;

		for(int i=1; i<=102; i++)
			for(int j=1; j<=102; j++)
				F[i][j]=0;
	
		for(int i=1; i<=H; i++)
			for(int j=1; j<=W; j++)
			cin >> F[i][j];
		
		
		int cnt = 0;
		for(int i=1; i<=H; i++){
			for(int j=0; j<=W; j++){
				if(F[i][j] == '@'){
					cnt++;
					APPLE(i, j);
				} 
				else if(F[i][j] == '#'){
					cnt++;
					KAKI(i, j);
				}
				else if(F[i][j] == '*'){
					cnt++;
					ORANGE(i, j);
				}
		}
	}
	cout << cnt << endl;
	}
	
	return 0;
}