You are given an array consisting of all integers from [l, r] inclusive. For example, if l = 2 and r = 5, the array would be [2, 3, 4, 5]. What's the minimum number of elements you can delete to make the [bitwise AND](https://en.wikipedia.org/wiki/Bitwise_operation#AND) of the array non-zero?

A bitwise AND is a binary operation that takes two equal-length binary representations and performs the AND operation on each pair of the corresponding bits.

Input

The first line contains one integer t (1 ≤ t ≤ 10^4) — the number of test cases. Then t cases follow.

The first line of each test case contains two integers l and r (1 ≤ l ≤ r ≤ 2 ⋅ 10^5) — the description of the array.

Output

For each test case, output a single integer — the answer to the problem.

Example

Input


5
1 2
2 8
4 5
1 5
100000 200000


Output


1
3
0
2
31072

Note

In the first test case, the array is [1, 2]. Currently, the bitwise AND is 0, as 1\ \& \ 2 = 0. However, after deleting 1 (or 2), the array becomes [2] (or [1]), and the bitwise AND becomes 2 (or 1). This can be proven to be the optimal, so the answer is 1.

In the second test case, the array is [2, 3, 4, 5, 6, 7, 8]. Currently, the bitwise AND is 0. However, after deleting 4, 5, and 8, the array becomes [2, 3, 6, 7], and the bitwise AND becomes 2. This can be proven to be the optimal, so the answer is 3. Note that there may be other ways to delete 3 elements.
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.lang.Math;
public class AndItsNon_Zero
{
	public static void main(String args[]) throws IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out = new PrintWriter(System.out);
		int t = Integer.parseInt(br.readLine());
		while(t-->0)
		{
			String input[] = br.readLine().split(" ");
			int in = Integer.parseInt(input[0]);
			int r = Integer.parseInt(input[1]);
			String inb = Integer.toBinaryString(in);
			String rb = Integer.toBinaryString(r);
			int lin = inb.length();
			int lr = rb.length();
			int result[] = new int[lr];
			int diff = r - in + 1;
			int temp = 0, temp2 = 0;
			for(int i = 0; i<lin; i++)
			{
				int j = lin-i-1;
				int rem = (in - (int)Math.pow(2,j))% ((int)Math.pow(2,j+1));
				if(Math.pow(2,j)>rem)
				{
					if(Math.pow(2,j+1)>r)
						result[j] = diff;
					else
					{
						temp = (diff - ((int) Math.pow(2,j) -rem))/((int)Math.pow(2,j+1));
						temp = temp*(int)Math.pow(2,j);
						temp2 = (diff - ((int) Math.pow(2,j) -rem))%((int)Math.pow(2,j+1));
						if(temp2>Math.pow(2,j))
							temp = temp + temp2-(int)Math.pow(2,j);
						result[j] = temp+(int)Math.pow(2,j) - rem;
					}
				}
				else
				{
					if(rem == (int) Math.pow(2,j))
					{
						temp = (diff)/((int)Math.pow(2,j+1));
						temp = temp*(int)Math.pow(2,j);
						temp2 = (diff)%((int)Math.pow(2,j+1));
						if(temp2>Math.pow(2,j))
							temp = temp + temp2 - (int)Math.pow(2,j);
						result[j] = temp;
					}
					else
					{
						if(Math.pow(2,i+1)+Math.pow(2,i)>r)
							result[j] = 0;
						else
						{
							temp = (diff - ((int)Math.pow(2,j+1)-rem))/((int)Math.pow(2,j+1));
							temp = temp * (int)Math.pow(2,j);
							temp2 = (diff - ((int)Math.pow(2,j+1)-rem))%(int)Math.pow(2,j+1);
							if(temp2<=(int)Math.pow(2,j))
								result[j] = temp + temp2;
							else result[j] = temp + (int)Math.pow(2,j);
						}
					}
				}
			}
			for(int i = lin; i<lr; i++)
			{
				int num = r - (int)Math.pow(2,i)+1;
				temp = num/((int)Math.pow(2,i+1));
				temp = temp*(int)Math.pow(2,i);
				temp2 = num%(int)Math.pow(2,i+1);
				if(temp2<=(int)Math.pow(2,i))
					result[i] = temp + temp2;
				else
					result[i] = temp + (int)Math.pow(2,i);
			}
			Arrays.sort(result);
			out.println(diff-result[lr-1]);
		}
		out.close();
	}
}