/*
* @author:- MAHMUDUL HASAN SAKIB
* DATE & TIME :- 2025-04-07 21:29:30
* BANGLADESH , SYLHET.
*/
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <complex>
#include <deque>
#include <forward_list>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iostream>
#include <limits>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <optional>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
#define fi first
#define se second
#define endl '\n'
#define ll long long
#define ull unsigned long long
#define ld long double
#define PI acos(-1.0)
#define pb push_back
#define mp make_pair
#define vi vector<ll>
#define maxn 500005
#define mod 1000000007
#define inf 1000000007
#define pii pair<ll,ll>
#define vii vector<pii>
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define lcm(a,b) ((a*b)/__gcd(a,b));
#define srt(v) sort(v.begin(),v.end())
#define rsrt(v) sort(v.rbegin(),v.rend())
#define setbits(x) __builtin_popcountll(x)
#define rep(i, a, b) for(ll i = (a); i < (b); i++)
#define per(i, a, b) for(int i = (a); i >= (b); i--)
#define rev_str(str) reverse(str.begin(),str.end());
#define print(v) for(auto e:v) cout<<e<<" "; cout<<endl;
#define sum(a) (accumulate((a).begin(), (a).end(), 0LL))
#define printp(v) for(auto e:v) cout<<e.first<<" "<<e.second<<endl;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
bool sortByValue(const pair<int, int>& a, const pair<int, int>& b) {return a.second > b.second;}
const int N = 1e6+7;
bool is_Prime(ll n) {
if (n < 2) return false;
for (ll i = 2; i * i <= n; ++i) {
if (n % i == 0) return false;
}
return true;
}
long long Pow(ll a,ll b){
ll ans = 1;
while(b>0){
if(b&1) ans*=a;
b>>=1;
a*=a;
}
return ans;
}
long long modPow(ll a,ll b){
ll ans = 1;
while(b>0){
if(b&1) ans=(ans*a)%mod;
b>>=1;
a=(a*a)%mod;
}
return ans;
}
// lies between divisor of a and b == GCD
// prime factorization while the taking the maximum power ==LCM...
ll gcd(ll a, ll b) {
while (b != 0) {
ll temp = b;
b = a % b;
a = temp;
}
return a;
}
ll Lcm(ll a, ll b) {
return (a / gcd(a, b)) * b;
}
// const int N = 1e5+10;
// int bit[N];
// void update(int i, int x){
// for(; i < N; i += (i&-i))
// bit[i] += x;
// }
// int sum(int i){
// int ans = 0;
// for(; i > 0; i -= (i&-i))
// ans += bit[i];
// return ans;
// }
struct FenwickTree {
vector<ll> bit;
ll n;
FenwickTree(ll size) {
n = size;
bit.assign(n + 1, 0);
}
void update(ll i, ll val) {
for (; i <= n; i += (i & -i)) {
bit[i] += val;
}
}
ll Sum(ll i) {
ll res = 0;
for (; i > 0; i -= (i & -i)) {
res += bit[i];
}
return res;
}
ll range_query(ll l, ll r) {
return Sum(r) - Sum(l - 1);
}
};
void solve(){
ll n;cin>>n;
vi p(n);
rep(i,0,n) cin>>p[i];
FenwickTree right_bit(n),left_bit(n);
vector<bool>special(n,false);
for(int i= n-1;i>=0;i--){
ll greater_eq = right_bit.range_query(p[i]+1,n);
if(greater_eq >= p[i]){
special[i] = true;
}
right_bit.update(p[i]+1,1);
}
for(int i = 0;i<n;i++){
ll smaller_eq = left_bit.Sum(p[i]+1);
if(smaller_eq>=p[i]){
special[i] = true;
}
left_bit.update(p[i]+1,1);
}
ll cnt = 0;
rep(i,0,n){
if(special[i]) cnt++;
}
cout<<cnt<<endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
ll t=1;//cin>>t;
while(t--){
solve();
}
return 0;
}