#include <iostream>
using namespace std;
int flag;
int flag1;
void MaxI(int a[], int mid, int lastp, int lastn[], int len) {
for (int i = lastp + 1; i < mid; i++) {
if (a[i] < a[mid] && a[i] > lastn[lastn[0]]) {
len++;
lastn[++lastn[0]] = a[i];
if (len > flag)
flag = len;
MaxI(a, mid, i, lastn, len);
len--;
lastn[0]--;
}
}
}//mid点左边最大增序列的长度
void MinI(int a[], int mid, int lastp, int lastn[], int len) {
for (int i = lastp - 1; i > mid; i--) {
if (a[i] < a[mid] && a[i] > lastn[lastn[0]]) {
len++;
lastn[++lastn[0]] = a[i];
if (len > flag1)
flag1 = len;
MinI(a, mid, i, lastn, len);
len--;
lastn[0]--;
}
}
}//mid点右边最大减序列的长度
int M(int a[], int mid, int len) {
flag = 0;
int lastn[len];
lastn[0] = 0;
MaxI(a, mid, -1, lastn, 0);
flag1 = 0;
int lastm[len];
lastm[0] = 0;
MinI(a, mid, len, lastm, 0);
return flag + flag1 + 1;
}
int main() {
int a;
while (cin >> a) { // 注意 while 处理多个 case
int b[a];
for (int i = 0; i < a; i++)
cin >> b[i];
int c,d=0;
for (int i = 0; i < a; i++) {
c= M(b, i, a);
if(c>d)
d=c;
}
cout << a-d << endl;
}
}
// 64 位输出请用 printf("%lld")