#include<iostream>

#define	mp	make_pair
#define	x	first
#define	y	second

using namespace std;

typedef	pair<int,int>	pii;

pii forest[100][100];

pii UF_root(pii p){return forest[p.y][p.x].x==-1?p:forest[p.y][p.x]=UF_root(forest[p.y][p.x]);}
void UF_union(pii p,pii q){p=UF_root(p);q=UF_root(q);forest[q.y][q.x]=p;}
bool UF_find(pii p,pii q){return UF_root(p)==UF_root(q);}

int main()
{
	int dx[]={-1,0},dy[]={0,-1};

	char garden[100][101];
	for(int h,w;cin>>h>>w,h;){
		for(int i=0;i<h;i++)	cin>>garden[i];
		for(int i=0;i<h;i++)for(int j=0;j<w;j++)forest[i][j].x=-1;

		for(int i=0;i<h;i++)for(int j=0;j<w;j++){
			for(int k=0;k<2;k++){
				int xx=j+dx[k],yy=i+dy[k];
				if(0<=xx && xx<w && 0<=yy && yy<h){
					if(garden[i][j]==garden[yy][xx] && !UF_find(mp(j,i),mp(xx,yy)))
						UF_union(mp(j,i),mp(xx,yy));
				}
			}
		}

		int cnt=0;
		for(int i=0;i<h;i++)for(int j=0;j<w;j++){
			if(forest[i][j].x==-1)	cnt++;
		}
		cout<<cnt<<endl;
	}

	return 0;
}