#include<bits/stdc++.h>
using namespace std;
const int N = 500;
int a[N + 5][N + 5];
int vis[N + 5][N + 5];
int dx[5] = {0,0,1,0,-1},dy[5] = {0,1,0,-1,0};
int n,m,cnt = 0;
unordered_map<string,bool> mp;
void dfs(int x,int y,string &s)
{
for(int i = 1;i <= 4;i++)
{
int tx = x + dx[i],ty = y + dy[i];
if(tx >= 1 && tx <= n && ty >= 1 && ty <= n && !vis[tx][ty] && a[x][y] == a[tx][ty])
{
s += (char)('0' + i);
vis[tx][ty] = 1;
dfs(tx,ty,s);
}
}
s += '5';
}
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])
{
string s = "";
vis[i][j] = 1;
dfs(i,j,s);
if(!mp[s]) cnt++;
mp[s] = 1;
}
}
}
cout << cnt;
return 0;
}