You are given two integers n and m. Find the \operatorname{MEX} of the sequence n ⊕ 0, n ⊕ 1, …, n ⊕ m. Here, ⊕ is the [bitwise XOR operator](https://en.wikipedia.org/wiki/Bitwise_operation#XOR).

\operatorname{MEX} of the sequence of non-negative integers is the smallest non-negative integer that doesn't appear in this sequence. For example, \operatorname{MEX}(0, 1, 2, 4) = 3, and \operatorname{MEX}(1, 2021) = 0. 

Input

The first line contains a single integer t (1 ≤ t ≤ 30 000) — the number of test cases.

The first and only line of each test case contains two integers n and m (0 ≤ n, m ≤ 10^9).

Output

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

Example

Input


5
3 5
4 6
3 2
69 696
123456 654321


Output


4
3
0
640
530866

Note

In the first test case, the sequence is 3 ⊕ 0, 3 ⊕ 1, 3 ⊕ 2, 3 ⊕ 3, 3 ⊕ 4, 3 ⊕ 5, or 3, 2, 1, 0, 7, 6. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 4.

In the second test case, the sequence is 4 ⊕ 0, 4 ⊕ 1, 4 ⊕ 2, 4 ⊕ 3, 4 ⊕ 4, 4 ⊕ 5, 4 ⊕ 6, or 4, 5, 6, 7, 0, 1, 2. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 3.

In the third test case, the sequence is 3 ⊕ 0, 3 ⊕ 1, 3 ⊕ 2, or 3, 2, 1. The smallest non-negative integer which isn't present in the sequence i. e. the \operatorname{MEX} of the sequence is 0.
					/*
					TO LEARN
					1-segment trees
					2-euler tour
				
					*/
					/*
					TO SOLVE 
					uva 1103
					codeforces 722 kavi on pairing duty
					*/
					/*
					bit manipulation shit
					1-Computer Systems: A Programmer's Perspective
					2-hacker's delight
					3-(02-03-bits-ints)
					4-machine-basics
					5-Bits Manipulation tutorialspoint
					*/
					/*
					TO WATCH
					1-what is bitmasking by kartik arora youtube
					*/
					            import java.util.*;
							    import java.math.*;
							    import java.io.*; 
							    import java.util.stream.Collectors;

							       public class A{
							     
							  static InputStream inputStream = System.in;
					            static FastScanner scan=new FastScanner();
							     public static PrintWriter out = new PrintWriter (new BufferedOutputStream(System.out));
static long l,r;
static long dp[][][][][];
static int len;
static int put(int st,int a,int b)
{
	if(st==0)
	{
		if(a==b)
			return 0;
		if(a<b)
			return 1;
		else return 2;
	}
	return st;
}
static long rec(int i,int f1,int s1,int f2,int s2)
{

	//System.out.println(ff+" "+ss);

	if(i<0){
		if((f1==0||f1==2)&&(s1==1||s1==0)&&(f2==0||f2==2)&&(s2==1||s2==0)){
	//out.println("FUCK");
		return 0;
	}
	//out.println(i);
	return (long)-(1e19+5000);
	}
	/*
	i can make 4 things 
	1-0 1
	2-1 0
	3-0 0
	4-1 1
	*/
	if(dp[i][f1][s1][f2][s2]!=-1)
		return dp[i][f1][s1][f2][s2];

	long toadd;
	toadd=(1L<<i);
	//out.println(toadd);
	int bit=(int)((l>>i)&1);
	int bit2=(int)((r>>i)&1);
	int tmp1,tmp2,tmp11,tmp22;
	long res=(long)-(1e19+5000);
	res=Math.max(res,rec(i-1,put(f1,0,bit),put(s1,0,bit2),put(f2,1,bit),put(s2,1,bit2))+toadd);
	res=Math.max(res,rec(i-1,put(f1,1,bit),put(s1,1,bit2),put(f2,0,bit),put(s2,0,bit2))+toadd);
//	out.println(res);
	res=Math.max(res,rec(i-1,put(f1,0,bit),put(s1,0,bit2),put(f2,0,bit),put(s2,0,bit2)));
	res=Math.max(res,rec(i-1,put(f1,1,bit),put(s1,1,bit2),put(f2,1,bit),put(s2,1,bit2)));
	return dp[i][f1][s1][f2][s2]=res;
	

}

						public static void main(String[] args)  throws Exception 
					      {
					 

								///scan=new FastScanner("cownomics.in");
							//out = new PrintWriter("cownomics.out");
							 
							 /*
							 currently doing 
							 1-digit dp
							 2-ds like fenwick and interval tree and sparse table 
							 */
							 /*
							 READING 
							 1-Everything About Dynamic Programming codeforces
							 2-DYNAMIC PROGRAMMING: FROM NOVICE TO ADVANCED topcoder
							 3-Introduction to DP with Bitmasking codefoces
							 4-Bit Manipulation hackerearth
							 5-read more about mobious and inculsion-exclusion 
							 */
		

							    int tt=1;
							   //System.out.println(131072^366525);						
					tt=scan.nextInt();


						 outer:while(tt-->0)
							    {
							    
			long n=scan.nextLong(),m=scan.nextLong();
			long res=Long.MAX_VALUE;
			for(int pos=31;pos>=0;pos--){
				if(((m>>pos)&1)!=0)
					continue;
			long cur=0;
			for(long i=31;i>pos;i--)
			{
				
				if(((m>>i)&1)==0&&((n>>i)&1)!=0)
						cur+=(1L<<i);
					else if(((m>>i)&1)!=0&&((n>>i)&1)==0)
						cur+=(1L<<i);
			}
			if(((n>>pos)&1)==0)
				cur+=(1<<pos);
			if((cur^n)>m)
					res=Math.min(res,cur);
		}
			out.println(res);
				
		

	}
	out.close();
				}
	    
							static class special{
								boolean bool;
								long n;
								//int id;
								special(boolean bool,long n)
								{
									this.bool=bool;
									this.n=n;
								}
								@Override
								    public int hashCode() {
							                int hash = 7;
				    hash = 31 * hash + (int) n;
				   
				    return hash;
							            }
							              @Override
							            public boolean equals(Object o){
							                if (o == this) return true;
							                if (o.getClass() != getClass()) return false;
							                special t = (special)o;
							                return t.bool == bool && t.n == n;
							            }
							}

							   
							     static long binexp(long a,long n)
							    {
							        if(n==0)
							            return 1;
							        long res=binexp(a,n/2);
							        if(n%2==1)
							            return res*res*a;
							        else 
							            return res*res;
							    }
							     
							    static long powMod(long base, long exp, long mod) {
							           if (base == 0 || base == 1) return base;
							           if (exp == 0) return 1;
							           if (exp == 1) return (base % mod+mod)%mod;
							           long R = (powMod(base, exp/2, mod) % mod+mod)%mod;
							           R *= R;
							           R %= mod;
							           if ((exp & 1) == 1) {
							               return (base * R % mod+mod)%mod;
							           }
							           else return (R %mod+mod)%mod;
							       }
							    static double dis(double x1,double y1,double x2,double y2)
							    {
							        return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
							    }
							    static long mod(long x,long y)
							        {
							            if(x<0)
							                x=x+(-x/y+1)*y;
							            return x%y;
							        }
							     public static  long pow(long b, long e) {
							                long r = 1;
							                while (e > 0) {
							                    if (e % 2 == 1) r = r * b ;
							                    b = b * b;
							                    e >>= 1;
							                }
							                return r;
							            }
							    private static void sort(long[] arr) {
							            List<Long> list = new ArrayList<>();
							            for (long object : arr) list.add(object);
							            Collections.sort(list);
							        //Collections.reverse(list);
							            for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
							        }
							    private static void sort2(long[] arr) {
							            List<Long> list = new ArrayList<>();
							            for (Long object : arr) list.add(object);
							            Collections.sort(list);
							        Collections.reverse(list);
							            for (int i = 0; i < list.size(); ++i) arr[i] = list.get(i);
							        }
							     static class FastScanner
					{
					    private int BS = 1 << 16;
					    private char NC = (char) 0;
					    private byte[] buf = new byte[BS];
					    private int bId = 0, size = 0;
					    private char c = NC;
					    private double cnt = 1;
					    private BufferedInputStream in;
					 
					    public FastScanner() {
					        in = new BufferedInputStream(System.in, BS);
					    }
					 
					    public FastScanner(String s) {
					        try {
					            in = new BufferedInputStream(new FileInputStream(new File(s)), BS);
					        } catch (Exception e) {
					            in = new BufferedInputStream(System.in, BS);
					        }
					    }
					 
					    private char getChar() {
					        while (bId == size) {
					            try {
					                size = in.read(buf);
					            } catch (Exception e) {
					                return NC;
					            }
					            if (size == -1) return NC;
					            bId = 0;
					        }
					        return (char) buf[bId++];
					    }
					 
					    public int nextInt() {
					        return (int) nextLong();
					    }
					 
					    public int[] nextInts(int N) {
					        int[] res = new int[N];
					        for (int i = 0; i < N; i++) {
					            res[i] = (int) nextLong();
					        }
					        return res;
					    }
					 
					    public long[] nextLongs(int N) {
					        long[] res = new long[N];
					        for (int i = 0; i < N; i++) {
					            res[i] = nextLong();
					        }
					        return res;
					    }
					 
					    public long nextLong() {
					        cnt = 1;
					        boolean neg = false;
					        if (c == NC) c = getChar();
					        for (; (c < '0' || c > '9'); c = getChar()) {
					            if (c == '-') neg = true;
					        }
					        long res = 0;
					        for (; c >= '0' && c <= '9'; c = getChar()) {
					            res = (res << 3) + (res << 1) + c - '0';
					            cnt *= 10;
					        }
					        return neg ? -res : res;
					    }
					 
					    public double nextDouble() {
					        double cur = nextLong();
					        return c != '.' ? cur : cur + nextLong() / cnt;
					    }
					 
					    public double[] nextDoubles(int N) {
					        double[] res = new double[N];
					        for (int i = 0; i < N; i++) {
					            res[i] = nextDouble();
					        }
					        return res;
					    }
					 
					    public String next() {
					        StringBuilder res = new StringBuilder();
					        while (c <= 32) c = getChar();
					        while (c > 32) {
					            res.append(c);
					            c = getChar();
					        }
					        return res.toString();
					    }
					 
					    public String nextLine() {
					        StringBuilder res = new StringBuilder();
					        while (c <= 32) c = getChar();
					        while (c != '\n') {
					            res.append(c);
					            c = getChar();
					        }
					        return res.toString();
					    }
					 
					    public boolean hasNext() {
					        if (c > 32) return true;
					        while (true) {
					            c = getChar();
					            if (c == NC) return false;
					            else if (c > 32) return true;
					        }
					    }
					}

							     static class Pair implements Comparable<Pair>{
							            public long x, y,z;
							            public Pair(long x1, long y1,long z1) {
							                x=x1;
							                y=y1;
							                z=z1;
							            }
							             public Pair(long x1, long y1) {
							                x=x1;
							                y=y1;
							    
							            }
							            
							            @Override
							            public int hashCode() {
							                return (int)(x + 31 * y);
							            }
							            public String toString() {
							                return x + " " + y+" "+z;
							            }
							            @Override
							            public boolean equals(Object o){
							                if (o == this) return true;
							                if (o.getClass() != getClass()) return false;
							                Pair t = (Pair)o;
							                return t.x == x && t.y == y&&t.z==z;
							            }
							    public int compareTo(Pair o)
							    {
							    	
							    
							    	return (int)(o.y-y);
							     
							        }
							     
							    }
							    
							    }

							     
