/*
ツ深ツつウツ優ツ静ヲツ探ツ催オツづ?嘉ーツつッツづ慊つキ.
Red and Blackツづ?つサツづアツづ按づ可陛渉づュツづィツづ慊つケツづア.
ツマツッツプツづーツ債カツ湘」ツづ個催?標ツつゥツづァツ渉?氾板づ可個ゥツづ? ツ塗ツづィツづつづ板つオツづ?つ「ツづ?づ?
ツ塗ツづィツづつづ板つオツつスツ嘉アツ青板つェツ督堋つヲツづ可づ按づィツづ慊つキ.

ツ暗按可コツづ個づヲツつ、ツづ按マツッツプツづ?つ?づェツづ? ツづ慊つク[0][0]ツつゥツづァツ塗ツづィツづつづ板つオ.

  ####
  #@##
  @@**
  ツ?ォ
  EEEE
  E@EE
  @@**

ツ塗ツづィツ終ツつヲツつスツづ?つアツづォツづー'E'ツづ可陛渉つヲツづ慊つキ.
ツ塗ツづィツづつづ板つオ1ツ嘉アツつェ, ツつソツづ・ツつ、ツづ?ツ凝ヲツ嘉ヲツづーツ表ツつキツつアツづ?づ可づ按づィツづ慊つキ.

ツ篠淞づ? ツ債カツ湘」ツつゥツづァツ個ゥツづ?つ「ツづ?づ? ツづ慊つセツ塗ツづィツ終ツつヲツづ?つ「ツづ按つ「ツ催?標ツつゥツづァツ塗ツづィツづつづ板つオツづ慊つキ.
ツづ按づ個づ? [1][1]ツつゥツづァツ塗ツづィツづつづ板つオ.

  EEEE
  E@EE
  @@**
  ツ?ォ
  EEEE
  EEEE
  EE**

ツつアツづェツづ? 2ツ凝ヲツ嘉ヲツ姪堋つェツ塗ツづェツづ慊つオツつス.
ツつ?づ?づ? ツ債カツ湘」ツつゥツづァツ渉?氾板づ可個ゥツづ?つ「ツつュツづ? [2][2]ツつェツづ慊つセツ塗ツづェツづ?つ「ツづ按つ「ツづ個づ?
[2][2]ツつゥツづァツ塗ツづィツづつづ板つオツづ慊つキ.

  EEEE
  EEEE
  EEEE

ツつアツづェツづ? 3ツ凝ヲツ嘉ヲツ姪堋つェツ塗ツづェツづ? ツ全ツづ?づ個催?標ツづーツ塗ツづィツ終ツつヲツづゥツつアツづ?つェツづ?つォツづ慊つオツつス.
ツ債。ツ嘉アツづ? 3ツ嘉アツ塗ツづィツづつづ板つオツつスツづ個づ? ツ督堋つヲツづ?ツ凝ヲツ嘉ヲツづ?つキ.
 */
#include <iostream>
using namespace std;

#define END 'E'

int h, w;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
char t[102][102];

//ツ催?標[y][x]ツつゥツづァ, ツ閉カツ篠嗅indツづ?づつづ按つェツづゥツ地ツ姪環づーツ全ツづ?塗ツづィツづつづ板つキツ催?帰ツ甘鳴青?
void dfs(int x, int y, char kind){
  t[y][x] = END; //ツ辿ツづ?つスツ催?標ツづーツ塗ツづゥ

  //4ツ陛サツ古シツづ鳴古シツつッツづ?催?帰ツつオツづ慊つキ
  for(int i = 0; i < 4; i++){
    int nx = x + dx[i];
    int ny = y + dy[i];

    //ツ篠淞行ツつュツ湘ェツ渉環つェツマツッツプツ禿?づ? ツ篠淞行ツつュツ湘ェツ渉環づ個閉カツ篠堋つェkindツづ?つ?づェツづ篠催?帰
    if(0 <= nx && nx < w && 0 <= ny && ny < h && t[ny][nx] == kind){
      dfs(nx, ny, kind);
    }
  }
}

int main(){
  //hツづ?ツづ個渉?氾板づ債気ツづーツづつつッツづヲツつ、ツ！(ツ債。ツ嘉アツづ個湘ェツ債?づ? wツづ?ツつェツ暗ェツ致ツつオツつスツ禿シツ療債つオツつゥツづ按つ「ツつゥツづァツ要ツ陳債暗督！)
  while(cin >> h >> w, h || w){
    for(int i = 0; i < h; i++){
      cin >> t[i];
    }

    int ans = 0;

    //ツ債カツ湘」ツづ個催?標ツつゥツづァツ渉?氾板づ? ツ塗ツづィツ終ツつヲツづ?つ「ツづ按つ「ツマツスツづーツ塗ツづィツづつづ板つオツづ慊つキ
    for(int i = 0; i < h; i++){
      for(int j = 0; j < w; j++){
        //ツ塗ツづィツ終ツつヲツづ?つ「ツづ按つ「ツマツスツつェツつ?づェツづ篠カツウツδ督トツつオツつスツ古」, ツ塗ツづィツづつづ板つオ
        if(t[i][j] != END){
          ans++;
          dfs(j, i, t[i][j]);
        }
      }
    }

    cout << ans << endl;
  }
}