You have an array a of length n. For every positive integer x you are going to perform the following operation during the x-th second:

  * Select some distinct indices i_{1}, i_{2}, …, i_{k} which are between 1 and n inclusive, and add 2^{x-1} to each corresponding position of a. Formally, a_{i_{j}} := a_{i_{j}} + 2^{x-1} for j = 1, 2, …, k. Note that you are allowed to not select any indices at all.



You have to make a nondecreasing as fast as possible. Find the smallest number T such that you can make the array nondecreasing after at most T seconds.

Array a is nondecreasing if and only if a_{1} ≤ a_{2} ≤ … ≤ a_{n}.

You have to answer t independent test cases.

Input

The first line contains a single integer t (1 ≤ t ≤ 10^{4}) — the number of test cases.

The first line of each test case contains single integer n (1 ≤ n ≤ 10^{5}) — the length of array a. It is guaranteed that the sum of values of n over all test cases in the input does not exceed 10^{5}.

The second line of each test case contains n integers a_{1}, a_{2}, …, a_{n} (-10^{9} ≤ a_{i} ≤ 10^{9}).

Output

For each test case, print the minimum number of seconds in which you can make a nondecreasing.

Example

Input


3
4
1 7 6 5
5
1 2 3 4 5
2
0 -4


Output


2
0
3

Note

In the first test case, if you select indices 3, 4 at the 1-st second and 4 at the 2-nd second, then a will become [1, 7, 7, 8]. There are some other possible ways to make a nondecreasing in 2 seconds, but you can't do it faster.

In the second test case, a is already nondecreasing, so answer is 0.

In the third test case, if you do nothing at first 2 seconds and select index 2 at the 3-rd second, a will become [0, 0].
/*
     D    A    R    K    L      _                 _         O    R    D    D    A    
         K                    / |                 | \        L    O    R         D   
        A         R         _ / |                 | \ _       K    L         O    R  
  D         A    R    K     _ / |         _       | \ _        L    O    R    D    D 
      R    K    L       _ / _   |       _ | \\    |   _ \       O    R    D    D     
     R         K        _ / _   |       _ | \ \   |   _ \        L    O    R         
    D    A    R     _ / _ / |   /     /         \ \   | \ _ \ _        K    L    O   
   D    D           _ / _ / |   /     /          \ \   | \ _ \ _             A       
       K        _ / _ /     | /     /     _       \ \ |     \ _ \ _      L    O    R 
 D    A        _ / _ /      | /     /     _       \ \ |      \ _ \ _      R         K
            _ / _ /         | |     |   |   \ (O) / | |         \ _ \ _         O    
    D      _ / _ /          | |     |   |    \   /  | |          \ _ \ _         D   
   A      / _ /     |   |   | \     |   \ _   \|/   / |   |   |     \ _ \            
  K      / _ /      |   |   | \     |   \ _    V    / |   |   |      \ _ \         L 
        / /         |   |   |   \ _ /       \ _ _ /   |   |   |         \ \          
       / /          |   |   |                         |   | | |          \ \         
      / /       |   | | \     \       ROWECHEN      /     / | |   |       \ \        
     / /    _ _ |   | | \     \        ZHONG        /     / | |   | _ _    \ \       
    / / _ /   \ | | | |   \ / \ \                 / / \ /   | | | | /   \ _ \ \      
   / / _ /    \ | | | |       \ \                 / /       | | | | /    \ _ \ \     
  / / /         \ \ \ \ /       /                 \       \ / / / /         \ \ \    
 \ / /          \ \ \ \ /       /                 \       \ / / / /          \ \ /   
  \|/             \|/         |         |         |           \|/             \|/    
  L         O     \|/         |         |   |     |           \|/        R    D      
 A    R    K    L             / _ |     |   | _     \      O    R    D    D    A    R
     L    O         R         / _ |     |   | _     \       D    D         A    R    
    L    O    R    D        / / / _     | _ | | \ _   \      D    A    R         K   
   O    R    D              / / / _ |   | _ | | \ _   \       D    A    R    K    L  
  R    D    D    A    R     | / / | | / | | \ / | | \ |        K    L    O    R    D 
 A         R         K      | / / | | / | | \ / | | \ |              L    O         R
     D    A         R         /   \ / | | | / | | / \ /     K    L         O    R    
         D    D         A     /   \ / | | | / | | / \/            R    K    L    O   
             R         D    D     / | / \ |   \ /        A    R    K    L    O    R  
       D    A    R    K    L      / | / \ |    \/              O    R    D    D      
 R    K    L    O    R    D       \ /     |      D    A    R         K    L    O    R
          D    A    R             \/      |            K    L    O    R    D    D    

*/
//TEMPLATE V2
	import java.io.*;
	import java.util.*;
	import java.math.*;
	
public class Main {
//Solution goes below: ------------------------------------

    public static void solution() throws IOException{
        int tests = nextInt();
        for(int test=0; test<tests;test++){
            int n = nextInt();
            int curr = 0;
            int cmax = Integer.MIN_VALUE;
            int res = 0;
            for(int i=0;i<n;i++){
                curr = nextInt();
                cmax = Math.max(cmax, curr);
                if(cmax-curr!=0){
                    res = Math.max(res,32 - Integer.numberOfLeadingZeros(cmax-curr));
                }
            }
            println(res);
        }
}
//Solution goes above: ------------------------------------
	public static final String IN_FILE = "";
	public static final String OUT_FILE = "";
//-------------------- ------------------------------------
	//IO
	public static BufferedReader br;
	public static StringTokenizer st;
	public static BufferedWriter bw;
    public static void main(String[] args) throws IOException{
		if(IN_FILE==""){
			br = new BufferedReader(new InputStreamReader(System.in)); 
		}else{
			try {
				br = new BufferedReader(new FileReader(IN_FILE));
			} catch (FileNotFoundException e) {
				br = new BufferedReader(new InputStreamReader(System.in));
			}
		}
		if (OUT_FILE==""){
			bw = new BufferedWriter(new OutputStreamWriter(System.out));
		}else{
			try {
				bw = new BufferedWriter (new FileWriter(OUT_FILE) );
			} catch (FileNotFoundException e) {
				bw = new BufferedWriter(new OutputStreamWriter(System.out));
			}
		}
		solution();
		bw.close();//Flushes too.
	}

	public static String nextToken() {
		while (st == null || !st.hasMoreElements()) {
			try {
				st = new StringTokenizer(br.readLine());
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return st.nextToken();
	}

	public static String nextLine() {
		st = null;
		try {
			return br.readLine();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public static int nextInt() {
		return Integer.parseInt(nextToken());
	}

	public static long nextLong() {
		return Long.parseLong(nextToken());
	}

	public static double nextDouble() {
		return Double.parseDouble(nextToken());
	}
	
	public static void println(Object s) throws IOException{
		bw.write(s.toString()+"\n");
	}
	
	public static void println() throws IOException{
		bw.newLine();
	}

    public static void print(Object s) throws IOException{
		bw.write(s.toString());
	}
	public static void flush() throws IOException{//Useful for debug
		bw.flush();
	}
	//Other
	public static class Arr<T> extends ArrayList<T> {} //I hate typing ArrayList
}