#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define pb push_back
#define mp make_pair
#define pii pair<ll, ll>
#define N 2003
#define MOD 1e9 + 7
ll n, m;
ll a[N][N];
list<pii> q;
bool vis[N][N];
vector<pii> size_ind;
ll ind;
void BFS(ll x, ll y) {
ll cnt = 0, num = a[x][y];
while(!q.empty()) {
pii ele = q.front();
q.pop_front();
ll i = ele.first, j = ele.second;
if(vis[i][j]) {
continue;
}
vis[i][j] = true; cnt++;
if(i > 0) {
if(a[i - 1][j] == num) {
q.pb(mp(i - 1, j));
}
}
if(i < n - 1) {
if(a[i + 1][j] == num) {
q.pb(mp(i + 1, j));
}
}
if(j > 0) {
if(a[i][j - 1] == num) {
q.pb(mp(i, j - 1));
}
}
if(j < m - 1) {
if(a[i][j + 1] == num) {
q.pb(mp(i, j + 1));
}
}
}
size_ind.pb(mp(cnt, ind));
ind++;
}
int main() {
cin >> n >> m;
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
cin >> a[i][j];
}
}
ind = 0;
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
vis[i][j] = false;
}
}
for(ll i = 0; i < n; i++) {
for(ll j = 0; j < m; j++) {
if(vis[i][j]) {
continue;
}
q.pb(mp(i, j));
BFS(i, j);
}
}
// What to do next?? I'm not getting it :(
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwoKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBwaWkgcGFpcjxsbCwgbGw+CgojZGVmaW5lIE4gMjAwMwojZGVmaW5lIE1PRCAxZTkgKyA3CgpsbCBuLCBtOwpsbCBhW05dW05dOwpsaXN0PHBpaT4gcTsKYm9vbCB2aXNbTl1bTl07CnZlY3RvcjxwaWk+IHNpemVfaW5kOwpsbCBpbmQ7Cgp2b2lkIEJGUyhsbCB4LCBsbCB5KSB7CglsbCBjbnQgPSAwLCBudW0gPSBhW3hdW3ldOwoJd2hpbGUoIXEuZW1wdHkoKSkgewoJCXBpaSBlbGUgPSBxLmZyb250KCk7CgkJcS5wb3BfZnJvbnQoKTsKCQlsbCBpID0gZWxlLmZpcnN0LCBqID0gZWxlLnNlY29uZDsKCQlpZih2aXNbaV1bal0pIHsKCQkJY29udGludWU7CgkJfQoJCXZpc1tpXVtqXSA9IHRydWU7IGNudCsrOwoJCWlmKGkgPiAwKSB7CgkJCWlmKGFbaSAtIDFdW2pdID09IG51bSkgewoJCQkJcS5wYihtcChpIC0gMSwgaikpOwoJCQl9CgkJfQoJCWlmKGkgPCBuIC0gMSkgewoJCQlpZihhW2kgKyAxXVtqXSA9PSBudW0pIHsKCQkJCXEucGIobXAoaSArIDEsIGopKTsKCQkJfQoJCX0KCQlpZihqID4gMCkgewoJCQlpZihhW2ldW2ogLSAxXSA9PSBudW0pIHsKCQkJCXEucGIobXAoaSwgaiAtIDEpKTsKCQkJfQoJCX0KCQlpZihqIDwgbSAtIDEpIHsKCQkJaWYoYVtpXVtqICsgMV0gPT0gbnVtKSB7CgkJCQlxLnBiKG1wKGksIGogKyAxKSk7CgkJCX0KCQl9Cgl9CglzaXplX2luZC5wYihtcChjbnQsIGluZCkpOwoJaW5kKys7Cn0KCmludCBtYWluKCkgewoJY2luID4+IG4gPj4gbTsKCWZvcihsbCBpID0gMDsgaSA8IG47IGkrKykgewoJCWZvcihsbCBqID0gMDsgaiA8IG07IGorKykgewoJCQljaW4gPj4gYVtpXVtqXTsKCQl9Cgl9CglpbmQgPSAwOwoJZm9yKGxsIGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJZm9yKGxsIGogPSAwOyBqIDwgbTsgaisrKSB7CgkJCXZpc1tpXVtqXSA9IGZhbHNlOwoJCX0KCX0KCWZvcihsbCBpID0gMDsgaSA8IG47IGkrKykgewoJCWZvcihsbCBqID0gMDsgaiA8IG07IGorKykgewoJCQlpZih2aXNbaV1bal0pIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCXEucGIobXAoaSwgaikpOwoJCQlCRlMoaSwgaik7CgkJfQoJfQoKCS8vIFdoYXQgdG8gZG8gbmV4dD8/IEknbSBub3QgZ2V0dGluZyBpdCA6KAoKCQoJcmV0dXJuIDA7Cn0=