#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long int arr[1011][1011],maxi,n,m;
int visited[1011][1011];
int counter=0;
void DFS(int x,int y)
{
if(visited[x][y] or arr[x][y]==0)return;
counter++;
visited[x][y]=1;
if(x+1<=n && arr[x+1][y]<=arr[x][y])DFS(x+1,y);
if(x-1>=1 && arr[x-1][y]<=arr[x][y])DFS(x-1,y);
if(y+1<=m && arr[x][y+1]<=arr[x][y])DFS(x,y+1);
if(y-1>=1 && arr[x][y-1]<=arr[x][y])DFS(x,y-1);
}
int main() {
// your code goes here
// #ifdef JUDGE
//freopen("input.txt", "rt", stdin);
//freopen("output.txt", "wt", stdout);
// #endif
ios_base::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
int t;
t=1;
while(t--)
{
int ans=0;
counter=0;
n=500;m=500;
srand(time(NULL));
int i,j;
maxi=0;
for(i=1;i<=n;i++)for(j=1;j<=m;j++){arr[i][j]=(rand())%1000000;maxi=max(arr[i][j],maxi);visited[i][j]=0;}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(arr[i][j]==maxi && visited[i][j]==0)
{
ans++;
DFS(i,j);
}
}
}
while(counter!=n*m)
{
maxi=0;
for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(visited[i][j]==0)maxi=max(maxi,arr[i][j]);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(arr[i][j]==maxi && visited[i][j]==0)
{
ans++;
DFS(i,j);
}
}
}
}
cout<<ans<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCmxvbmcgbG9uZyBpbnQgYXJyWzEwMTFdWzEwMTFdLG1heGksbixtOwppbnQgdmlzaXRlZFsxMDExXVsxMDExXTsKaW50IGNvdW50ZXI9MDsKdm9pZCBERlMoaW50IHgsaW50IHkpCnsKICAgIGlmKHZpc2l0ZWRbeF1beV0gb3IgYXJyW3hdW3ldPT0wKXJldHVybjsKICAgIGNvdW50ZXIrKzsKICAgIHZpc2l0ZWRbeF1beV09MTsKICAgIGlmKHgrMTw9biAmJiBhcnJbeCsxXVt5XTw9YXJyW3hdW3ldKURGUyh4KzEseSk7CiAgICBpZih4LTE+PTEgJiYgYXJyW3gtMV1beV08PWFyclt4XVt5XSlERlMoeC0xLHkpOwogICAgaWYoeSsxPD1tICYmIGFyclt4XVt5KzFdPD1hcnJbeF1beV0pREZTKHgseSsxKTsKICAgIGlmKHktMT49MSAmJiBhcnJbeF1beS0xXTw9YXJyW3hdW3ldKURGUyh4LHktMSk7Cn0KIAppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCS8vICNpZmRlZiBKVURHRQogICAgLy9mcmVvcGVuKCJpbnB1dC50eHQiLCAicnQiLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dC50eHQiLCAid3QiLCBzdGRvdXQpOwogICAgLy8gI2VuZGlmCglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZShOVUxMKTsKCWNvdXQudGllKE5VTEwpOwoJaW50IHQ7Cgl0PTE7Cgl3aGlsZSh0LS0pCgl7CgkgICAgaW50IGFucz0wOwoJICAgIGNvdW50ZXI9MDsKCSAgICBuPTUwMDttPTUwMDsKCSAgICBzcmFuZCh0aW1lKE5VTEwpKTsKCSAgICBpbnQgaSxqOwoJICAgIG1heGk9MDsKCSAgICBmb3IoaT0xO2k8PW47aSsrKWZvcihqPTE7ajw9bTtqKyspe2FycltpXVtqXT0ocmFuZCgpKSUxMDAwMDAwO21heGk9bWF4KGFycltpXVtqXSxtYXhpKTt2aXNpdGVkW2ldW2pdPTA7fQoJICAgIGZvcihpPTE7aTw9bjtpKyspCgkgICAgewoJICAgICAgICBmb3Ioaj0xO2o8PW07aisrKQoJICAgICAgICB7CgkgICAgICAgICAgICBpZihhcnJbaV1bal09PW1heGkgJiYgdmlzaXRlZFtpXVtqXT09MCkKCSAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICBhbnMrKzsKCSAgICAgICAgICAgICAgICBERlMoaSxqKTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgfQoJICAgIH0KCSAgICB3aGlsZShjb3VudGVyIT1uKm0pCgkgICAgewoJICAgICAgICBtYXhpPTA7CgkgICAgICAgIGZvcihpPTE7aTw9bjtpKyspZm9yKGo9MTtqPD1tO2orKylpZih2aXNpdGVkW2ldW2pdPT0wKW1heGk9bWF4KG1heGksYXJyW2ldW2pdKTsKCSAgICAgICAgZm9yKGk9MTtpPD1uO2krKykKCSAgICAgICAgewoJICAgICAgICAgICAgZm9yKGo9MTtqPD1tO2orKykKCSAgICAgICAgICAgIHsKCSAgICAgICAgICAgICAgICBpZihhcnJbaV1bal09PW1heGkgJiYgdmlzaXRlZFtpXVtqXT09MCkKCSAgICAgICAgICAgICAgICB7CgkgICAgICAgICAgICAgICAgICAgIGFucysrOwoJICAgICAgICAgICAgICAgICAgICBERlMoaSxqKTsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICB9CgkgICAgICAgIH0KCSAgICAgICAKCSAgICB9CgkgICAgCgkgICAgY291dDw8YW5zPDxlbmRsOwoJICAgIAoJfQoJCglyZXR1cm4gMDsKfQ==