#include <bits/stdc++.h>
using namespace std;
struct NODE{
int x,y;
};
int G[705][705];
int vis[705][705];
int cnt;int n,m;
int dx[8] = {1,0,-1,0,1,1,-1,-1};
int dy[8] = {0,1,0,-1,1,-1,1,-1};
NODE highest(int x,int y){
NODE mx;mx.x = x;mx.y = y;
for(int i = 0;i < 8;i++){
int xx = x + dx[i];int yy = y + dy[i];
if(G[xx][yy] != 0 && vis[xx][yy] != 1 && G[xx][yy] >= G[x][y]){
vis[xx][yy] = 1;
NODE now = highest(xx,yy);
mx = now;
}
}
return mx;
}
void dfs(int x,int y){
int s = G[x][y];
G[x][y] = 0;
for(int i = 0;i < 8;i++){
int xx = x + dx[i];int yy = y + dy[i];
if(G[xx][yy] != 0 && s >= G[xx][yy]){
dfs(xx,yy);
}
}
}
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(G[i][j] != 0){
vis[i][j] = 1;
NODE h = highest(i,j);
dfs(h.x,h.y);
cnt++;
}
}
}
cout<<cnt<<endl;
return 0;
}