#Author	:	Bhavya Singh
#Date	:	24-May-2020
#Name	:	Longest Increasing Subsequence


#PROBLEM:

Given a sequence A of size N, find the length of the longest increasing subsequence from a given sequence .
The longest increasing subsequence means to find a subsequence of a given sequence in which the subsequence's elements are in sorted order, lowest to highest, and in which the subsequence is as long as possible. This subsequence is not necessarily contiguous, or unique.

Note: Duplicate numbers are not counted as increasing subsequence.

Input:
The first line contains an integer T, depicting total number of test cases. Then following T lines contains an integer N depicting the size of array and next line followed by the value of array.

Output:
For each testcase, in a new line, print the Max length of the subsequence in a separate line.

Constraints:
1 = T = 100
1 = N = 1000
0 = A[i] = 300

Example:
Input:
2
16
0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
6
5 8 3 7 9 1

Output:
6
3

Explanation:
Testcase 2: Longest increasing subsequence is of size 3 with elements (there are many subsequence, but listing one of them): 5 7 9.

#CODE

def ceill ( A, l, r, key ):
    while( r-l > 1 ):
        m = l + (r-l)//2
        if A[m]>=key:
            r = m
        else:
            l = m
    return r

def LIS( arr ):
    tail = [0 for _ in range(len(arr))]
    tail[0] = arr[0]
    lenn = 1
    for i in range( 1, len(arr)):
        if arr[i]<tail[0]:
            tail[0] = arr[i]
        elif arr[i]>tail[lenn-1]:
            tail[lenn] = arr[i]
            lenn+=1
        else:
            tail[ceill( tail, -1, lenn - 1, arr[i] )] = arr[i]
    return lenn


T = int(input())
for test in range(T):
    N = int(input())
    inp = list(map(int, input().split()))
    print( LIS(inp) )