#include using namespace std; using ll = long long; #define rep(i,j,k) for(int i=j; i<(int)(k); i++) #define rrep(i,j,k) for(int i=j; i>=(int)(k); i--) #define Rep(i,j,k) for(ll i=j; i<(ll)(k); i++) #define RRep(i,j,k) for(ll i=j; i>=(ll)(k); i--) #define all(v) v.begin(), v.end() #define PQ priority_queue,vector>,greater>> const ll INF=4e18; ll FACT(ll n){ if(n==0 || n==1) return 1; else return n*FACT(n-1); } ll COMB(ll n, ll r, vector> &v){ if(r<0 || r>n) return 0; else { if(r==0) return 1; else { ll p,q; if(v[n-1][r-1]!=-1) p=v[n-1][r-1]; else { v[n-1][r-1]=COMB(n-1,r-1,v); p=v[n-1][r-1]; } if(v[n-1][r]!=-1) q=v[n-1][r]; else { v[n-1][r]=COMB(n-1,r,v); q=v[n-1][r]; } return p+q; } } } int rmq(int l,int r,int a,int b,int u,vector &seg){ if(l<=a && b<=r) return seg[u]; if(r<=a || b<=l) return -2e9; int m=(a+b)/2; int answerL=rmq(l,r,a,m,u*2,seg); int answerR=rmq(l,r,m,b,u*2+1,seg); return max(answerL,answerR); } int rsq(int l,int r,int a,int b,int u,vector &seg){ if(r<=a || b<=l) return 0; if(l<=a && b<=r) return seg[u]; int m=(a+b)/2; int answerL=rsq(l,r,a,m,u*2,seg); int answerR=rsq(l,r,m,b,u*2+1,seg); return answerL+answerR; } int main() { int n,k; cin >> n >> k; int x=1; rep(i,0,k) x*=2; int y=1; rep(i,0,n) y*=2; int ans=y/x; cout << ans << endl; }