//dp[i]定义:长度为 i 的递增序列最小尾元素
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
const int inf=0x3f3f3f3f;
int a[maxn*4],b[maxn*4];
int main(){
int T,n,len;
cin>>T;
while(T--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
b[1]=a[1];len=1;
for(int i=2;i<=n;i++){
if(a[i]>b[len]){
b[++len]=a[i];
//更新新长度下最小结尾数
}
else{
int cnt=lower_bound(b+1,b+len,a[i])-b; //lower_bound优化 logn
b[cnt]=a[i];
/*在已有的长度情况(1~len)里找结尾数 第一个>=a[i]的
即找到b[cnt-1]<a[i]<=b[cnt] 并更新该长度cnt下 最小结尾数*/
}
}
printf("%d\n",len);
}
}