The following problem is well-known: given integers n and m, calculate

<image>, 

where 2n = 2·2·...·2 (n factors), and <image> denotes the remainder of division of x by y.

You are asked to solve the "reverse" problem. Given integers n and m, calculate

<image>. 

Input

The first line contains a single integer n (1 ≤ n ≤ 108).

The second line contains a single integer m (1 ≤ m ≤ 108).

Output

Output a single integer — the value of <image>.

Examples

Input

4
42


Output

10


Input

1
58


Output

0


Input

98765432
23456789


Output

23456789

Note

In the first example, the remainder of division of 42 by 24 = 16 is equal to 10.

In the second example, 58 is divisible by 21 = 2 without remainder, and the answer is 0.
import java.awt.Point;
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.*;
import java.util.*;

public class Main {
	//////
	static class FastReader {
		BufferedReader br;
		StringTokenizer st;

		public FastReader() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}
			return str;
		}
	}

	//////
	public static long modularExponentiation(long x, long n, long M) {
		long result = 1;
		while (n > 0) {
			if (n % 2 == 1)
				result = (result * x) % M;
			x = (x * x) % M;
			n = n / 2;
		}
		return result;
	}
	public static long modularExponentiation1(long x, long n) {
		long result = 1;
		while (n > 0) {
			if (n % 2 == 1)
				result = (result * x);
			x = (x * x) ;
			n = n / 2;
		}
		return result;
	}


	/////
	static long d(int x, int y) {
		if (Math.abs(x - y) > 1) {
			return y - x;
		} else
			return 0;

	}

	static int closestSquare(int num) {

		if (num == 0) {
			return -1;
		}
		int root = (int) Math.sqrt(num);
		int another = root + 1;
		root = root * root;
		another = another * another;
		if (another - num > num - root) {
			return num - root;
		} else
			return another - num;

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

		FastReader scan = new FastReader();
		PrintWriter pw = new PrintWriter(System.out);
		
		int N=scan.nextInt();
		int M=scan.nextInt();
		
		int num=1;
		if(M==1){
			System.out.println("1");
			return;
		}
		for(int i=0;i<N;i++){
			if(num>M){
				System.out.println(M);
				return;
			}
			num=num*2;
			
		}
		
		System.out.println(M%num);
		
	}
}
