#include <iostream>
#include <bits/stdc++.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#define You_ss_ef ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define pi 3.141592654
#define tc int T; cin >> T; while (T--)
#define FP(_) fixed << std::setprecision(_)
#define Gaza main
#define ll long long
#define ld long double
#define ss << ' '
#define el << '\n'
#define all(_) _.begin(), _.end()
#define rall(_) _.rbegin(), _.rend()
#define uni(_) _.erase(unique(all(_)), _.end())
using namespace std;
void IO() {
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
int n, nxt = 1;
vector <int> v;
int dp[2][2001][2005];
map <int,int> mp;
int solve(int t, int i, int w)
{
if(i == n) return 0;
int &ret = dp[t][i][w];
if(~ret) return ret;
int x = 0, y = 0, z = 0, o = 0, p = 0;
if(w == 0) {
o = solve(0,i+1,v[i]) + 1;
p = solve(1,i+1,v[i]) + 1;
}
else {
if(!t and v[i] > w) x = solve(t,i+1,v[i]) + 1;
if(t and v[i] < w) y = solve(t,i+1,v[i]) + 1;
}
z = solve(t,i+1,w);
return ret = max({x,y,z,o,p});
}
void answer()
{
cin >> n;
v = vector <int> (n);
for(int i = 0; i < n; i++) cin >> v[i];
for(int i = 0; i < n; i++) mp[v[i]];
for(auto &[i,j] : mp) j = nxt++;
for(int i = 0; i < n; i++) v[i] = mp[v[i]];
memset(dp,-1,sizeof(dp));
cout << solve(0,0,0);
mp.clear();
}
int Gaza()
{ You_ss_ef
IO();
int TC = 1;
cin >> TC;
do {
answer();
TC--;
// if (TC)
cout el;
} while (TC != 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgojZGVmaW5lIFlvdV9zc19lZiBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgcGkgMy4xNDE1OTI2NTQKI2RlZmluZSB0YyBpbnQgVDsgY2luID4+IFQ7IHdoaWxlIChULS0pCiNkZWZpbmUgRlAoXykgZml4ZWQgPDwgc3RkOjpzZXRwcmVjaXNpb24oXykKI2RlZmluZSBHYXphIG1haW4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHNzIDw8ICcgJwojZGVmaW5lIGVsIDw8ICdcbicKI2RlZmluZSBhbGwoXykgXy5iZWdpbigpLCBfLmVuZCgpCiNkZWZpbmUgcmFsbChfKSBfLnJiZWdpbigpLCBfLnJlbmQoKQojZGVmaW5lIHVuaShfKSBfLmVyYXNlKHVuaXF1ZShhbGwoXykpLCBfLmVuZCgpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIElPKCkgewojaWZuZGVmIE9OTElORV9KVURHRQpmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0gCmludCBuLCBueHQgPSAxOyAgIAp2ZWN0b3IgPGludD4gdjsKaW50IGRwWzJdWzIwMDFdWzIwMDVdOwptYXAgPGludCxpbnQ+IG1wOwppbnQgc29sdmUoaW50IHQsIGludCBpLCBpbnQgdykKewogICAgaWYoaSA9PSBuKSByZXR1cm4gMDsKICAgIGludCAmcmV0ID0gZHBbdF1baV1bd107CiAgICBpZih+cmV0KSByZXR1cm4gcmV0OyAKICAgIGludCB4ID0gMCwgeSA9IDAsIHogPSAwLCBvID0gMCwgcCA9IDA7IAogICAgaWYodyA9PSAwKSB7CiAgICAgICAgbyA9IHNvbHZlKDAsaSsxLHZbaV0pICsgMTsgCiAgICAgICAgcCA9IHNvbHZlKDEsaSsxLHZbaV0pICsgMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmKCF0IGFuZCB2W2ldID4gdykgeCA9IHNvbHZlKHQsaSsxLHZbaV0pICsgMTsgCiAgICAgICAgaWYodCBhbmQgdltpXSA8IHcpIHkgPSBzb2x2ZSh0LGkrMSx2W2ldKSArIDE7CiAgICB9CiAgICB6ID0gc29sdmUodCxpKzEsdyk7CiAgICByZXR1cm4gcmV0ID0gbWF4KHt4LHkseixvLHB9KTsKfQp2b2lkIGFuc3dlcigpIAp7ICAgCiAgICBjaW4gPj4gbjsKICAgIHYgPSB2ZWN0b3IgPGludD4gKG4pOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IHZbaV07IAogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgbXBbdltpXV07CiAgICBmb3IoYXV0byAmW2ksal0gOiBtcCkgaiA9IG54dCsrOwogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgdltpXSA9IG1wW3ZbaV1dOwogICAgbWVtc2V0KGRwLC0xLHNpemVvZihkcCkpOwogICAgY291dCA8PCBzb2x2ZSgwLDAsMCk7CiAgICBtcC5jbGVhcigpOwp9CmludCBHYXphKCkKeyAgIFlvdV9zc19lZiAgIAogICAgSU8oKTsKICAgIGludCBUQyA9IDE7CiAgICBjaW4gPj4gVEM7CiAgICBkbyB7CiAgICAgICAgYW5zd2VyKCk7CiAgICAgICAgVEMtLTsKICAgICAgICAvLyBpZiAoVEMpCiAgICAgICAgICAgIGNvdXQgZWw7CiAgICB9IHdoaWxlIChUQyAhPSAwKTsKICAgIHJldHVybiAwOwp9