// 以每一个人作为基准,寻找左边最长递增子序列,右边的也可以反转求值后再反转
// 求每个人为基准的最长左递增子序列长度集合
let n = Number(readline()), dp = []
let stu = readline().split(' ').map(i => Number(i))
let dp1 = fn(stu), dp2 = fn(stu.reverse()).reverse(), max = 1
for(let i=0; i<n; i++) {
max = Math.max(max, dp1[i]+dp2[i])
}
console.log(n-max+1) // 基准元素两次参与计算,需要+1
function fn(arr) {
let dp = [1] // 保存每个元素所在位置的左边最长递增子序列长度,左边第一个元素只有自己,所以是1
for(let i=1; i<arr.length; i++) {
dp[i] = 1 // 每个元素首先有个自己,初始化为1
for(let j=0; j<i; j++) {
if(arr[j] < arr[i]) { // 左边元素小于基准元素
dp[i] = Math.max(dp[i], dp[j]+1)
}
}
}
return dp
}
// 选中一个作为基准,划分的小问题就是,某个同学要不要出列
// l和r分别向左向右检索,发现小的就继续前进(判断前进或是加入out),发现大的就加入out
// 方案一:时间复杂度太大
// for(let i=0; i<n; i++) {
// arr.push(fn(i, stu[i], i, stu[i], 0))
// }
// arr.sort((a, b) => a-b)
// console.log(arr[0])
// function fn(l, ln, r, rn, out) {
// if(l==0 && r==stu.length)return out
// if(l>0) {
// if(stu[l-1]>=ln)return fn(l-1, ln, r, rn, out+1)
// else return Math.min(fn(l-1, ln, r, rn, out+1), fn(l-1, stu[l-1], r, rn, out))
// }
// if(r<stu.length) {
// if(stu[r+1]>=rn)return fn(l, ln, r+1, rn, out+1)
// else return Math.min(fn(l, ln, r+1, rn, out+1), fn(l, ln, r+1, stu[r+1], out))
// }
// }