import java.util.Scanner;
// 问题可以转换成最长递增/递减子序列问题, 二分查找使查找的时间效率从O(N)
// 降为O(logN)
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int N = in.nextInt();
int[] heights = new int[N];
for (int i = 0; i < N; i++) {
heights[i] = in.nextInt();
}
System.out.println(pick(heights));
}
}
public static int pick(int[] h) {
int n = h.length, out = n;
for (int i = 0; i < n; i++) {
int l_len = count(h, 0, i, true);
int r_len = count(h, i, n - 1, false);
out = Math.min(out, n - (l_len + r_len - 1));
}
return out;
}
//获取某个人左边的最长递增身高序列,或右边的最长递减身高序列
//这里用 二分提高查找效率
public static int count(int[] h, int left, int right, boolean isUp) {
int res = 0;
int[] tail = new int[right - left + 1];
for (int i = left; i <= right; i++) {
int l = 0, r = res;
while (l < r) {
int mid = (r + l) / 2;
if (isUp) {
if (tail[mid] < h[i]) {
l = mid + 1;
} else {
r = mid;
}
} else {
if (tail[mid] > h[i]) {
l = mid + 1;
} else {
r = mid;
}
}
}
if (l == res) {
res++;
}
tail[l] = h[i];
}
return res;
}
}