#include <iostream>
#include <climits>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <vector>

#define ll long long
#define REP(i, n) for (int i=0;i<n;++i)
#define REP_1(i, n) for (int i=1;i<=n;++i)
#define REP_2(i, j, n, m) REP(i, n) REP(j, m)
#define REP_2_1(i, j, n, m) REP_1(i, n) REP_1(j, m)

#define JU_RAN(a,x,b) a<=x&&x<=b



using namespace std;

char v[105][105];
int m,n;

int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};

void dfs(int x,int y, char z){
    v[x][y]='0';

    REP(i,4){
        int nx=x+dx[i];
        int ny=y+dy[i];

        if(JU_RAN(1,nx,m)&&JU_RAN(1,ny,n)&&v[nx][ny]==z){
            dfs(nx,ny,z);
        }
    }
}

void solve(){

    while (cin>>m>>n){
        if(m==0&&n==0)break;

        REP_2_1(i,j,m,n)cin>>v[i][j];

        int ans=0;
        REP_2_1(i,j,m,n){
                if(v[i][j]!='0'){
                    dfs(i,j,v[i][j]);
                    ans++;
                }
            }

        cout<<ans<<endl;
    }




}



int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

#ifdef LOCAL_DEFINE
    freopen("input.txt", "rt", stdin);
#endif

    solve();



#ifdef LOCAL_DEFINE
    cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
    return 0;
}
