import bisect #引入二分法
def hcteam(l): #定义一个函数,寻找最长的子序列
    arr = [l[0]] #定义列表,将传入函数的列表第一个元素放入当前元素
    dp = [1]*len(l) #定义一个列表,默认子序列有当前元素1,长度是传入函数的列表长度
    for i in range(1,len(l)): #从第二个元素开始查找
        if l[i] > arr[-1]: #如果元素大于arr列表的最后一个元素,就把它插入列表末尾
            arr.append(l[i])
            dp[i] = len(arr)# 获取这个元素子序列的长度
        else: # 否则,利用二分法找到比元素大的元素的位置,用新的元素替代比它大的那个元素的值,这样就能制造出一个顺序排列的子序列
            pos = bisect.bisect_left(arr, l[i])
            arr[pos] = l[i]
            dp[i] =pos+1 # 获取这个元素子序列的长度
    return dp

while True:
    try:
        n = int(input())
        sg = list(map(int,input().split()))
        left_t = hcteam(sg) #向左遍历查找子序列
        right_t = hcteam(sg[::-1])[::-1] #向右遍历查找子序列
        res = [left_t[i]+right_t[i]-1 for i in range(len(sg))] #因为左右都包含原元素,所以需要减1 ;得到各元素能得到的子序列的最大长度
        print(n-max(res)) # 源列表长度-可以生成的最长子序列长度  得到需要剔除的最小人数
    except:
        break