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