#include #define rep(i,n) for(int i=0;i<(int)(n);i++) using namespace std; using ll = long long ; using P = pair ; using pll = pair; constexpr int INF = 1e9+100; constexpr long long LINF = 1e17; constexpr int MOD = 1000000007; constexpr double PI = 3.14159265358979323846; int n; int a[100005]; vector lis(){ vector res(n); vector lis(n,INF); rep(i,n){ *lower_bound(lis.begin(),lis.end(),a[i]) = a[i]; res[i]=lower_bound(lis.begin(),lis.end(),INF)-lis.begin(); } return res; } int main(){ scanf("%d",&n); rep(i,n) scanf("%d",&a[i]); int ans = 0; vector b1 = lis(); reverse(a,a+n); vector b2 = lis(); rep(i,n) a[i]*=-1; vector c2 = lis(); reverse(a,a+n); vector c1 = lis(); reverse(b2.begin(),b2.end()); reverse(c2.begin(),c2.end()); rep(i,n){ ans = max(ans,min(b1[i],b2[i])-1); ans = max(ans,min(c1[i],c2[i])-1); } cout << ans << endl; return 0; }