#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#define FOR(i,n) for(int (i)=0;(i)<(n);++(i))
#define FORI(i,n) for(int (i)=1;(i)<=(n);++(i))
#define REP(i,a,b) for(int (i)=(a);(i)<=(b);++i)
#define REPD(i,a,b) for(int (i)=(a); (i)>=(b);--i)
#define X first
#define Y second
using namespace std;
int n, a[100010], f[100010], k = 0, lst[100010];
int Find(int p) {
int l = 1, r = k, m = (l+r)>>1;
while (l!=m && r!=m) {
if (a[lst[m]] < a[p]) l = m;
else r = m-1;
m = (l+r)>>1;
}
REPD(i,r,l) if (a[lst[i]] < a[p]) return i;
return 0;
}
int Find2(int p) {
int l = 1, r = k, m = (l+r)>>1;
while (l!=m && r!=m) {
if (a[lst[m]] > a[p]) l = m;
else r = m-1;
m = (l+r)>>1;
}
REPD(i,r,l) if (a[lst[i]] > a[p]) return i;
return 0;
}
void process() {
scanf("%d",&n);
REP(i,1,n) scanf("%d",&a[i]);
int ans = 0, t;
REPD(i,n,1) {
t = Find(i);
f[i] = t+1;
if (t+1 > k) {
k++; lst[k] = i;
}
else if (a[i] < a[lst[t+1]]) lst[t+1] = i;
}
k = 0;
REPD(i,n,1) {
t = Find2(i);
ans = max(ans,f[i]+t);
if (t+1 > k) {
k++; lst[k] = i;
}
else if (a[i] > a[lst[t+1]]) lst[t+1] = i;
}
cout << ans;
}
int main(void)
{
process();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKI2RlZmluZSBGT1IoaSxuKSBmb3IoaW50IChpKT0wOyhpKTwobik7KysoaSkpCiNkZWZpbmUgRk9SSShpLG4pIGZvcihpbnQgKGkpPTE7KGkpPD0obik7KysoaSkpCiNkZWZpbmUgUkVQKGksYSxiKSBmb3IoaW50IChpKT0oYSk7KGkpPD0oYik7KytpKQojZGVmaW5lIFJFUEQoaSxhLGIpIGZvcihpbnQgKGkpPShhKTsgKGkpPj0oYik7LS1pKQojZGVmaW5lIFggZmlyc3QKI2RlZmluZSBZIHNlY29uZAp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbiwgYVsxMDAwMTBdLCBmWzEwMDAxMF0sIGsgPSAwLCBsc3RbMTAwMDEwXTsKCmludCBGaW5kKGludCBwKSB7CiAgICBpbnQgbCA9IDEsIHIgPSBrLCBtID0gKGwrcik+PjE7CiAgICB3aGlsZSAobCE9bSAmJiByIT1tKSB7CiAgICAgICAgaWYgKGFbbHN0W21dXSA8IGFbcF0pIGwgPSBtOwogICAgICAgIGVsc2UgciA9IG0tMTsKICAgICAgICBtID0gKGwrcik+PjE7CiAgICB9CiAgICBSRVBEKGkscixsKSBpZiAoYVtsc3RbaV1dIDwgYVtwXSkgcmV0dXJuIGk7CiAgICByZXR1cm4gMDsKfQppbnQgRmluZDIoaW50IHApIHsKICAgIGludCBsID0gMSwgciA9IGssIG0gPSAobCtyKT4+MTsKICAgIHdoaWxlIChsIT1tICYmIHIhPW0pIHsKICAgICAgICBpZiAoYVtsc3RbbV1dID4gYVtwXSkgbCA9IG07CiAgICAgICAgZWxzZSByID0gbS0xOwogICAgICAgIG0gPSAobCtyKT4+MTsKICAgIH0KICAgIFJFUEQoaSxyLGwpIGlmIChhW2xzdFtpXV0gPiBhW3BdKSByZXR1cm4gaTsKICAgIHJldHVybiAwOwp9CnZvaWQgcHJvY2VzcygpIHsKICAgIHNjYW5mKCIlZCIsJm4pOwogICAgUkVQKGksMSxuKSBzY2FuZigiJWQiLCZhW2ldKTsKICAgIGludCBhbnMgPSAwLCB0OwogICAgUkVQRChpLG4sMSkgewogICAgICAgIHQgPSBGaW5kKGkpOwogICAgICAgIGZbaV0gPSB0KzE7CiAgICAgICAgaWYgKHQrMSA+IGspIHsKICAgICAgICAgICAgaysrOyBsc3Rba10gPSBpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChhW2ldIDwgYVtsc3RbdCsxXV0pIGxzdFt0KzFdID0gaTsKICAgIH0KICAgIGsgPSAwOwogICAgUkVQRChpLG4sMSkgewogICAgICAgIHQgPSBGaW5kMihpKTsKICAgICAgICBhbnMgPSBtYXgoYW5zLGZbaV0rdCk7CiAgICAgICAgaWYgKHQrMSA+IGspIHsKICAgICAgICAgICAgaysrOyBsc3Rba10gPSBpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChhW2ldID4gYVtsc3RbdCsxXV0pIGxzdFt0KzFdID0gaTsKICAgIH0KICAgIGNvdXQgPDwgYW5zOwp9CmludCBtYWluKHZvaWQpCnsKICAgIHByb2Nlc3MoKTsKCXJldHVybiAwOwp9Cgo=