#include<bits/stdc++.h>
#define ll long long
using namespace std;
int const N = 1e5 + 10;
vector<ll> a(N), arr(N);
class SegmentTree {
public:
int n;
vector<ll> tree;
SegmentTree(int n) : tree(2 * n + 10), n(n){};
void build() {
for (int i = 1; i <= n; i++)
tree[n + i] = arr[i];
for (int i = n; i > 0; i--)
tree[i] = tree[i << 1] + tree[i << 1 | 1];
}
void upd(int pos, int value) {
for (tree[pos += n] -= value; pos > 1; pos >>= 1)
tree[pos >> 1] = tree[pos] + tree[pos ^ 1]; // Range sum
}
long long query(int l, int r) {
long long res = 0;
for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
if (l & 1) res += tree[l++];
if (r & 1) res += tree[--r];
}
return res;
}
};
class SegmentTree2 {
public:
int n;
vector<ll> tree;
SegmentTree2(int n) : tree(2 * n + 10), n(n){};
void build() {
for (int i = 1; i <= n; i++)
tree[n + i] = 0;
for (int i = n; i > 0; i--)
tree[i] = tree[i << 1] + tree[i << 1 | 1];
}
void upd(int pos, int value) {
for (tree[pos += n] += value; pos > 1; pos >>= 1)
tree[pos >> 1] = tree[pos] + tree[pos ^ 1]; // Range sum
}
long long query(int l, int r) {
long long res = 0;
for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
if (l & 1) res += tree[l++];
if (r & 1) res += tree[--r];
}
return res;
}
};
int main() {
// int t;
// cin >> t;
// while (t--){
ll n, ans = 0;
cin >> n;
for (int i = 1; i <= n; i++){
cin >> a[i];
arr[a[i]]++;
}
SegmentTree r(n + 2);
SegmentTree2 l(n + 2);
l.build();
r.build();
for (int i = 1; i <= n; i++){
r.upd(a[i], 1);
ll x = l.query(0, a[i]);
ll y = r.query(a[i], n);
if (x >= a[i] || y >= a[i]) ans++;
// cout << x << " " << y << endl;
l.upd(a[i], 1);
}
cout << ans << endl;
//}
}