#define ll long long
#define fo(i , n) for(ll i = 0 ; i < n ; i++)
#include<bits/stdc++.h>
using namespace std ;
ll inf = 1e18 ;
vector<ll> LIS(vector<ll>& v) // if repeated allowed, use upper_bound
{
ll n = v.size() ;
vector<ll> arr(n+1, inf), len(n) ;
arr[0] = -inf ;
for(int i = 0 ; i < n ; i++)
{
ll ind = lower_bound(arr.begin() , arr.end() , v[i]) - arr.begin() ;
arr[ind] = v[i] ;
len[i] = ind ;
}
return len ;
}
void solve()
{
ll n ;
cin >> n ;
vector<ll> arr(n);
for(int i = 0 ; i < n ; i++)
cin >> arr[i] ;
vector<ll> v1 = LIS(arr) ;
reverse(arr.begin() , arr.end()) ;
for(int i = 0 ; i < n ; i++)
arr[i] *= -1 ;
vector<ll> v2 = LIS(arr) ;
reverse(v2.begin() , v2.end()) ;
for(int i = 1 ; i < n ; i++)
v1[i] = max(v1[i] , v1[i-1]) ;
for(int i = n-2 ; i >= 0 ; i--)
v2[i] = max(v2[i] , v2[i+1]) ;
ll ans = v1[n-1] ;
for(int i = 0 ; i < n-1 ; i++)
{
ans = max(ans , v1[i] + v2[i+1]) ;
}
cout << ans << '\n' ;
return ;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("inputf.txt" , "r" , stdin) ;
freopen("outputf.txt" , "w" , stdout) ;
freopen("error.txt" , "w" , stderr) ;
#endif
ll t = 1 ;
cin >> t ;
while(t--)
{
solve() ;
}
cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n";
return 0;
}