#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> a, 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,mp[v[i]],mp[v[i]]) + 1;
p = solve(1,mp[v[i]],mp[v[i]]) + 1;
}
else {
if(!t and mp[v[i]] > w) x = solve(t,i+1,mp[v[i]]) + 1;
if(t and mp[v[i]] < w) y = solve(t,i+1,mp[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(auto &i : v) cin >> i;
for(int i = 0; i < n; i++) mp[v[i]];
for(auto i : mp) mp[i.first] = nxt++;
memset(dp,-1,sizeof(dp));
cout << solve(0,0,0);
}
int Gaza()
{ You_ss_ef
IO();
int TC = 1;
cin >> TC;
do {
answer();
TC--;
// if (TC)
cout el;
} while (TC != 0);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8c3RyaW5nPgojZGVmaW5lIFlvdV9zc19lZiBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoMCk7Y291dC50aWUoMCk7CiNkZWZpbmUgcGkgMy4xNDE1OTI2NTQKI2RlZmluZSB0YyBpbnQgVDsgY2luID4+IFQ7IHdoaWxlIChULS0pCiNkZWZpbmUgRlAoXykgZml4ZWQgPDwgc3RkOjpzZXRwcmVjaXNpb24oXykKI2RlZmluZSBHYXphIG1haW4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIHNzIDw8ICcgJwojZGVmaW5lIGVsIDw8ICdcbicKI2RlZmluZSBhbGwoXykgXy5iZWdpbigpLCBfLmVuZCgpCiNkZWZpbmUgcmFsbChfKSBfLnJiZWdpbigpLCBfLnJlbmQoKQojZGVmaW5lIHVuaShfKSBfLmVyYXNlKHVuaXF1ZShhbGwoXykpLCBfLmVuZCgpKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIElPKCkgewojaWZuZGVmIE9OTElORV9KVURHRQpmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0gCmludCBuLCBueHQgPSAxOyAgIAp2ZWN0b3IgPGludD4gYSwgdjsKaW50IGRwWzJdWzIwMDFdWzIwMDVdOwptYXAgPGludCxpbnQ+IG1wOwppbnQgc29sdmUoaW50IHQsIGludCBpLCBpbnQgdykKewogICAgaWYoaSA9PSBuKSByZXR1cm4gMDsKICAgIGludCAmcmV0ID0gZHBbdF1baV1bd107CiAgICBpZih+cmV0KSByZXR1cm4gcmV0OyAKICAgIGludCB4ID0gMCwgeSA9IDAsIHogPSAwLCBvID0gMCwgcCA9IDA7IAogICAgaWYodyA9PSAwKSB7CiAgICAgICAgbyA9IHNvbHZlKDAsbXBbdltpXV0sbXBbdltpXV0pICsgMTsgCiAgICAgICAgcCA9IHNvbHZlKDEsbXBbdltpXV0sbXBbdltpXV0pICsgMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmKCF0IGFuZCBtcFt2W2ldXSA+IHcpIHggPSBzb2x2ZSh0LGkrMSxtcFt2W2ldXSkgKyAxOyAKICAgICAgICBpZih0IGFuZCBtcFt2W2ldXSA8IHcpIHkgPSBzb2x2ZSh0LGkrMSxtcFt2W2ldXSkgKyAxOwogICAgfQogICAgeiA9IHNvbHZlKHQsaSsxLHcpOwogICAgcmV0dXJuIHJldCA9IG1heCh7eCx5LHosbyxwfSk7Cn0Kdm9pZCBhbnN3ZXIoKSAKeyAgIAogICAgY2luID4+IG47CiAgICB2ID0gdmVjdG9yIDxpbnQ+IChuKTsKICAgIGZvcihhdXRvICZpIDogdikgY2luID4+IGk7IAogICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgbXBbdltpXV07CiAgICBmb3IoYXV0byBpIDogbXApIG1wW2kuZmlyc3RdID0gbnh0Kys7CiAgICBtZW1zZXQoZHAsLTEsc2l6ZW9mKGRwKSk7CiAgICBjb3V0IDw8IHNvbHZlKDAsMCwwKTsKfQppbnQgR2F6YSgpCnsgICBZb3Vfc3NfZWYgICAKICAgIElPKCk7CiAgICBpbnQgVEMgPSAxOwogICAgY2luID4+IFRDOwogICAgZG8gewogICAgICAgIGFuc3dlcigpOwogICAgICAgIFRDLS07CiAgICAgICAgLy8gaWYgKFRDKQogICAgICAgICAgICBjb3V0IGVsOwogICAgfSB3aGlsZSAoVEMgIT0gMCk7CiAgICByZXR1cm4gMDsKfQ==