// 记录路径
#include <bits/stdc++.h>
using namespace std;
int n, m;
int g[505][505];
bool v[505][505];
set<string> s;
int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
string str;
void dfs(int x, int y, int c)
{
v[x][y] = 1;
for (int i = 0; i < 4; i++)
{
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (!v[xx][yy] && xx >= 1 && xx <= n && yy >= 1 && yy <= m && c == g[xx][yy])
{
str += char(i + 48);
dfs(xx, yy, c);
}
}
str += '*'; // 特殊结点处理
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> g[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (!v[i][j])
{
str = "";
dfs(i, j, g[i][j]);
s.insert(str);
}
cout << s.size();
return 0;
}