import bisect def LIS(lists): N = len(lists) inf = 10**15 dp = [inf for i in range(N+1)] length = [0 for i in range(N)] for i in range(N): index = bisect.bisect_left(dp, lists[i]) dp[index] = lists[i] length[i] = index + 1 return length def LDS(lists): L = [-x for x in lists] return LIS(L) N = int(input()) A = list(map(int, input().split())) left_upper = LIS(A) left_downer = LDS(A) A.reverse() right_upper = LIS(A) right_downer = LDS(A) ans = 0 for i in range(N): ans = max(ans, min(left_upper[i], right_upper[N-1-i]), min(left_downer[i], right_downer[N-1-i])) print(ans - 1)