#include<iostream>
#include<cstdio>
using namespace std;
int n,m,ans;
int h[705][705];
int vis[705][705];
int nx[9]={0,-1,-1,-1,0,0,1,1,1};
int ny[9]={0,-1,0,1,-1,0,-1,0,1};
void dfs(int x,int y){
for(int i=1;i<=8;i++){
int dx=x+nx[i];
int dy=y+ny[i];
//越界
if(dx>0&&dy>0&&dx<=n&&dy<=m){
if(h[dx][dy]==h[x][y]){
vis[dx][dy]=1;
dfs(dx,dy);
}
}
}
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>h[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int q=1;q<=8;q++){
if(h[i+nx[q]][j+ny[q]]>h[i][j]&&!vis[i][j]){
dfs(i+nx[q],j+ny[q]);
}
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j]){
ans++;
dfs(i,j);
}
}
}
cout<<ans;
return 0;
}
MLE所有点