#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
struct P{
  int y; 
  int x;
  char c; // 持ってるやつ
  P(int y,int x,char c):y(y),x(x),c(c){}
};
char g[111][111];
int d[111][111];
int dy[]={0,0,1,-1};
int dx[]={1,-1,0,0};
void dfs(int y,int x,char c);
int h,w;
int main(){
  while(1){
    cin >> h >> w;
    if(!h && !w)break;
    for(int i=0;i<w;i++){
      cin >> g[i];
    }
    memset( d , 0 , sizeof(d) );
    int ret = 0;
    for(int i=0;i<w;i++){
      for(int j=0;j<h;j++){
	if(g[i][j] != '\0'){
	  dfs( i , j , g[i][j] );
	  ret++;
	}
      }
    }
    cout << ret << endl;
  }
}
void dfs(int y,int x,char c){
  queue<P> que;
  que.push(P(y,x,c));
  d[y][x] = 1;
  while(!que.empty()){
    P p = que.front();que.pop();
    g[p.y][p.x] = '\0';
    for(int i=0;i<4;i++){
      int ty = p.y + dy[i];
      int tx = p.x + dx[i];
      if(g[ty][tx] == c && d[ty][tx] == 0){
	d[ty][tx] = 1;
	que.push(P(ty,tx,c));
      }
    }
  }
}