#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 101;
int n;
int a[N], b[N], c[N];
//思路:利用状态表示数组b[], c[]分别求出以i结尾的最长上升子序列 和 以i开头的最长下降子序列
int res() {
if (n == 0) return 0;//处理边界
for (int i = 0; i < n; i++) {
b[i] = 1;
c[i] = 1;//均初始化为1,即最短时为自身
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (a[j] < a[i])
b[i] = max(b[i], b[j] + 1);
}
}//此时b[]记录完毕
for (int i = n - 1; i >= 0; i--) {//要反向遍历否则会导致依赖的后续状态未被正确计算
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i])
c[i] = max(c[i], c[j] + 1);
}
}//c[]记录完毕
int result = 99;
for (int i = 0; i < n; i++) result = min(result, n - b[i] - c[i] + 1);
return result;
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> a[i];
cout << res() << endl;
return 0;
}