#include <iostream>
using namespace std;
int h,w;
char g[102][102];
bool visited[102][102];
int _x[4]={-1,0,0,1},_y[4]={0,-1,1,0};//先行后列
int nxt_x,nxt_y;//先行后列
int ans;
void dfs(int x,int y)
{
	visited[x][y]=true;
	for(int i=0;i<4;i++)
		{
			nxt_x=x+_x[i];
			nxt_y=y+_y[i];
			if(nxt_x>=1&&nxt_x<=h&&nxt_y>=1&&nxt_y<=w&&visited[nxt_x][nxt_y]==false&&g[nxt_x][nxt_y]==g[x][y])
			{
				
				dfs(nxt_x,nxt_y);
			}
		}
}
int main()
{
  cin>>h>>w;
	while(w&&h)
  {
		
	  for(int i=1;i<=h;i++)//行
		  for(int j=1;j<=w;j++)//列
		  {
			 visited[i][j]=false;
			  cin>>g[i][j];
		  }
	  ans=0;//the same character is the same part
	  for(int i=1;i<=h;i++)//行
		  for(int j=1;j<=w;j++)//列
		  {
			  if(!visited[i][j])
			  {
				  ans++;
				  dfs(i,j);
			  }
		  }
	  cout<<ans<<endl;
		cin>>h>>w;
  }
   return 0;
}
