#include<iostream>
using namespace std;

char F[102][102];

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

	F[Y][X] = '.';
	
	DFSapple(Y-1,X  );
	DFSapple(Y  ,X+1);
	DFSapple(Y+1,X  );
	DFSapple(Y  ,X-1);
}	

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

	F[Y][X] = '.';
	
	DFSpersimmon(Y-1,X  );
	DFSpersimmon(Y  ,X+1);
	DFSpersimmon(Y+1,X  );
	DFSpersimmon(Y  ,X-1);
}	

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

	F[Y][X] = '.';
	
	DFSorange(Y-1,X  );
	DFSorange(Y  ,X+1);
	DFSorange(Y+1,X  );
	DFSorange(Y  ,X-1);
}	

int main()
{
	while(true){
		int N,M;
		cin >> N >> M;
		if(N==0&&M==0)
			break;

		for(int y=1;y<=N;y++)
			for(int x=1;x<=M;x++)
				cin >> F[y][x];

		int cnt = 0;
		for(int y=1;y<=N;y++)
			for(int x=1;x<=M;x++)
				if(F[y][x]=='@'){
					cnt++;
					DFSapple(y,x);
				}

		for(int y=1;y<=N;y++)
			for(int x=1;x<=M;x++)
				if(F[y][x]=='#'){
					cnt++;
					DFSpersimmon(y,x);
				}

		for(int y=1;y<=N;y++)
			for(int x=1;x<=M;x++)
				if(F[y][x]=='*'){
					cnt++;
					DFSorange(y,x);
				}

		cout << cnt << endl;
	}

	return 0;
}
