#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n, ans = 0;
cin >> n;
vector<int> a(n, 0);
for(int i = 0; i < n; ++i){
cin >> a[i];
}
map<int, int> mp;
set<int> st;
vector<int> dp(n + 5, 0), left(n + 5, 0), id(n + 5, 0);
left[0] = 0;
for(int i = 1; i < n; ++i){
if(a[i] == a[i - 1]) left[i] = left[i - 1];
else left[i] = i;
}
for(int z = 0; z < n; ++z){
st.insert(a[z]);
mp[a[z]] += 1;
dp[z] = 1;
auto lb = st.lower_bound(a[z]);
if(lb == st.begin()){
if(left[z] != 0) id[z] = left[z] - 1, dp[z] = dp[left[z] - 1] + 1;
else id[z] = -1;
}else{--lb;
int ind = left[z] - 1;
if(mp[a[z]] == (z - left[z] + 1)){
if(left[z] != 0){
if(a[ind] == *lb){
id[z] = id[ind];
if(id[z] >= 0) dp[z] = dp[id[z]] + 1;
}else{
id[z] = left[z] - 1;
if(id[z] >= 0) dp[z] = dp[id[z]] + 1;
}
}else{
id[z] = -1;
}
}else{
if(left[z] != 0){
if(a[left[z] - 1] == *lb){
id[z] = left[z] - 1;
if(id[left[z] - 1] >= 0) dp[z] = dp[id[left[z] - 1]] + 1;
}else{
id[z] = left[z] - 1;
if(id[z] >= 0) dp[z] = dp[id[z]] + 1;
}
}else{
id[z] = -1;
}
}
}
//cout << dp[z] << "\n";
}
cout << dp[n - 1] << "\n";
return 0;
}