import sys def input(): return sys.stdin.readline().strip() def mapint(): return map(int, input().split()) sys.setrecursionlimit(10**9) N = int(input()) As = list(mapint()) from bisect import bisect_left def LIS(in_lis): lis = [] ret_lis = [1]*len(in_lis) for i in range(N): a = in_lis[i] idx = bisect_left(lis, a) if idx>=len(lis): lis.append(a) ret_lis[i] = len(lis) elif lis[idx]==a: ret_lis[i] = len(lis) else: lis[idx] = a return ret_lis ascending = LIS(As) decending = LIS([-a for a in As]) r_ascending = LIS(As[::-1])[::-1] r_decending = LIS([-a for a in As[::-1]])[::-1] ans = 0 for n, r in zip(ascending, r_ascending): ans = max(ans, min(n, r)) for n, r in zip(decending, r_decending): ans = max(ans, min(n, r)) print(ans-1)