#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>
#define maxn 100010
using namespace std;
int val[maxn];
int N;
void DP(int num[],int dp[],int same[])
{
int i,j;
vector<int> v;
for(i=0;i<N;i++)
{
int a,b;
a=lower_bound(v.begin(),v.end(),num[i])-v.begin();
b=upper_bound(v.begin(),v.end(),num[i])-v.begin();
if(b==v.size())
{
v.push_back(num[i]);
dp[i]=v.size();
}
else
{
v[b]=num[i];
dp[i]=b+1;
}
same[i]=min(same[i],b-a+1);
}
}
int dp1[maxn],dp2[maxn];
int same[maxn];
int main()
{
int i,j;
int T;
scanf("%d",&T);
while(T--)
{
memset(same, 0x3f, sizeof(same));
scanf("%d",&N);
for(i=0;i<N;i++)
scanf("%d",&val[i]);
reverse(val,val+N);
DP(val,dp1,same);
for(i=0;i<N;i++)
val[i]=-val[i];
DP(val,dp2,same);
int ans=0;
for(i=0;i<N;i++)
ans=max(ans,dp1[i]+dp2[i]-same[i]);
printf("%d\n",ans);
}
return 0;
}