#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
#define ff first
#define ss second
#define pb push_back
#define all(a) a.begin(),a.end()
#define rall(a) a.rbegin(),a.rend()
#define f(i,x,y) for(int i=x;i<y;i++)
#define f2(i,x,y) for(int i=x;i>=y;i--)
#define pii pair<int,int>
#define Fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
const int MOD =1000000007;
const int INF = 1e18;
const int N = 2e5;
class SegmentTree
{
public:
int n;
vector<int>tree,arr;
SegmentTree(vector<int>&v){
n = v.size();
arr = v;
tree.assign(4*n,0);
build(1,0,n-1);
}
void update(int ind,int val){update(1,0,n-1,ind,val);}
int query(int l,int r){return query(1,0,n-1,l,r);}
private:
int merge(int a,int b){
return (a+b);
}
void build(int node,int start,int end){
if(start==end)tree[node] = arr[start];
else {
int mid = (start+end)/2;
build(2*node,start,mid);
build(2*node+1,mid+1,end);
tree[node] = merge(tree[2*node],tree[2*node+1]);
}
}
void update(int node,int start,int end,int ind,int val){
if(ind<start or ind>end)return;
if(start==end)tree[node] += val;
else {
int mid = (start+end)/2;
if(start<=ind and ind<=mid)update(2*node,start,mid,ind,val);
else update(2*node+1,mid+1,end,ind,val);
tree[node] = merge(tree[2*node],tree[2*node+1]);
}
}
int query(int node,int start,int end,int l,int r){
if(end<l or start>r)return 0;
if(start==end)return tree[node];
else if(l<=start and end<=r)return tree[node];
else{
int mid = (start+end)/2;
int left = query(2*node,start,mid,l,r);
int right = query(2*node+1,mid+1,end,l,r);
return merge(left,right);
}
}
};
void solve(int tc){
int n; cin >> n;
vector<int>v(n),is(n),gg(n+1);
for(int i=0;i<n;i++)
cin >> v[i];
SegmentTree seg(gg);
for(int i=0;i<n;i++){
int tot = seg.query(0,v[i]);
is[i] |= tot >= v[i];
seg.update(v[i],1);
}
gg.assign(n+1,0);
SegmentTree peg(gg);
for(int i=n-1;i>=0;i--){
int tot = peg.query(v[i],n-1);
is[i] |= tot >= v[i];
peg.update(v[i],1);
}
cout << accumulate(all(is),0ll) << endl;
}
int32_t main(){
Fast
int t=1;
// cin >> t;
for(int tc=1;tc<=t;tc++){
solve(tc);
}
return 0;
}