#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;
}