#include <iostream>
#include <vector>
using namespace std;
vector<int> a;
vector<pair<int,int>> seg;//segments of continuous increasing
vector<int> cnt;//idx of segments with only length 1 (can be ignored)
int l = 0, r = 0;
void add_seg() {
seg.emplace_back(l, r-1);
if (r-l == 1) cnt.push_back(l);
l = r;
}
int main() {
int n;
cin >> n;
a.resize(n);
for (; r < n; r++) {//right pointer
cin >> a[r];
if (r > 0 && a[r] < a[r-1]) add_seg();
}
add_seg(); //add last section
if (cnt.size() == 0) {
cout << seg.size() << "\n";
return 0;
}
vector<int> dp(cnt.size());//max of len1 segments that are skippable (non-cont)
dp[0] = 1;
if (cnt.size() >= 2) {
dp[1] = (cnt[1] - cnt[0] == 1) ? 1 : 2;//check if continuous with dp[0]
for (int i = 2; i < dp.size(); i++) {
if (cnt[i-1] == cnt[i]-1) {//continuous, must skip previous
dp[i] = max(dp[i-1], dp[i-2]+1);
} else {
dp[i] = dp[i-1] + 1;
}
}
}
cout << seg.size() - dp.back() << endl;
}