#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 7e2 + 5;
const int M = 7e2 + 5;
/* trái - phải - lên - xuống - chéo lên trái - chéo lên phải - chéo xuống trái - chéo xuống phải */
int dx[8] = {0, 0, -1, 1, -1, -1, 1, 1};
int dy[8] = {-1, 1, 0, 0, -1, 1, -1, 1};
int n, m;
int h[N][M];
bool vis[N][M];
bool ok(int x, int y) {
return (1 <= x && x <= n && 1 <= y && y <= m);
}
void bfs(int sx, int sy, bool& is_top) {
queue<ii> q;
vis[sx][sy] = true;
q.push({sx, sy});
while (!q.empty()) {
ii u = q.front(); q.pop();
int x = u.first, y = u.second;
for (int i = 0; i < 8; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (ok(nx, ny)) {
if (h[nx][ny] == h[x][y]) {
if (!vis[nx][ny]) {
vis[nx][ny] = true;
q.push({nx, ny});
}
}
else {
is_top &= (h[nx][ny] < h[x][y]);
}
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= m; y++) cin >> h[x][y];
}
int ans = 0;
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= m; y++) {
if (!vis[x][y]) {
bool is_top = true; // ô (x, y) có phải đỉnh đồi hay không
bfs(x, y, is_top);
ans += is_top;
}
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSA3ZTIgKyA1Owpjb25zdCBpbnQgTSA9IDdlMiArIDU7ICAKCi8qIHRyw6FpIC0gcGjhuqNpIC0gbMOqbiAtIHh14buRbmcgLSBjaMOpbyBsw6puIHRyw6FpIC0gY2jDqW8gbMOqbiBwaOG6o2kgLSBjaMOpbyB4deG7kW5nIHRyw6FpIC0gY2jDqW8geHXhu5FuZyBwaOG6o2kgKi8gCmludCBkeFs4XSA9IHswLCAwLCAtMSwgMSwgLTEsIC0xLCAxLCAxfTsgCmludCBkeVs4XSA9IHstMSwgMSwgMCwgMCwgLTEsIDEsIC0xLCAxfTsgIAoKaW50IG4sIG07IAppbnQgaFtOXVtNXTsgCgpib29sIHZpc1tOXVtNXTsgIAoKYm9vbCBvayhpbnQgeCwgaW50IHkpIHsKCXJldHVybiAoMSA8PSB4ICYmIHggPD0gbiAmJiAxIDw9IHkgJiYgeSA8PSBtKTsgIAp9Cgp2b2lkIGJmcyhpbnQgc3gsIGludCBzeSwgYm9vbCYgaXNfdG9wKSB7CglxdWV1ZTxpaT4gcTsKCgl2aXNbc3hdW3N5XSA9IHRydWU7ICAKCXEucHVzaCh7c3gsIHN5fSk7ICAKCgl3aGlsZSAoIXEuZW1wdHkoKSkgewoJCWlpIHUgPSBxLmZyb250KCk7IHEucG9wKCk7ICAgCgkJaW50IHggPSB1LmZpcnN0LCB5ID0gdS5zZWNvbmQ7ICAKCgkJZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKCQkJaW50IG54ID0geCArIGR4W2ldLCBueSA9IHkgKyBkeVtpXTsgCgkJCQoJCQlpZiAob2sobngsIG55KSkgewoJCQkJaWYgKGhbbnhdW255XSA9PSBoW3hdW3ldKSB7CgkJCQkJaWYgKCF2aXNbbnhdW255XSkgewoJCQkJCQl2aXNbbnhdW255XSA9IHRydWU7ICAKCQkJCQkJcS5wdXNoKHtueCwgbnl9KTsgIAoJCQkJCX0KCQkJCX0KCQkJCWVsc2UgewoJCQkJCWlzX3RvcCAmPSAoaFtueF1bbnldIDwgaFt4XVt5XSk7ICAgCgkJCQl9CgkJCX0KCQl9Cgl9IAkKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gbTsgCglmb3IgKGludCB4ID0gMTsgeCA8PSBuOyB4KyspIHsKCQlmb3IgKGludCB5ID0gMTsgeSA8PSBtOyB5KyspIGNpbiA+PiBoW3hdW3ldOyAKCX0KCQoJaW50IGFucyA9IDA7ICAgCglmb3IgKGludCB4ID0gMTsgeCA8PSBuOyB4KyspIHsKCQlmb3IgKGludCB5ID0gMTsgeSA8PSBtOyB5KyspIHsKCQkJaWYgKCF2aXNbeF1beV0pIHsKCQkJCWJvb2wgaXNfdG9wID0gdHJ1ZTsgLy8gw7QgKHgsIHkpIGPDsyBwaOG6o2kgxJHhu4luaCDEkeG7k2kgaGF5IGtow7RuZwoJCQkJYmZzKHgsIHksIGlzX3RvcCk7IAoJCQkJYW5zICs9IGlzX3RvcDsgICAKCQkJfQoJCX0KCX0KCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==