#include<bits/stdc++.h>
using namespace std;
#define zjj long long
const int MAXN=500+5;
int n,m,ans;
int a[MAXN][MAXN];
int dx[5]={0,1,0,-1},dy[5]={1,0,-1,0};
string s=" ";
map<string,int> mp;
bool vis[MAXN][MAXN];
void dfs(int x,int y,int c){
vis[x][y]=true;
for(int i=0;i<4;i++){
if(!vis[x+dx[i]][y+dy[i]]&&a[x+dx[i]][y+dy[i]]==c&&x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m){
dfs(x+dx[i],y+dy[i],c);
s+=i+'0';
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j]){
s=" ";
dfs(i,j,a[i][j]);
if(mp[s]==0) ans++;
mp[s]++;
}
}
}
cout<<ans<<endl;
return 0;
}
只对了前一半