#input of int(split by space)
def get_i()
  return gets.chomp.split(" ").map(&:to_i)
end
#input of float(split by space)
def get_f()
  return gets.chomp.split(" ").map(&:to_f)
end
#input of string(split by space)
def get()
  return gets.chomp.split(" ")
end
#input of string(split per one character)
def get_nsp()
  return gets.chomp.split("")
end
#yes or no decision
def yn_judge(bool,y="Yes",n="No")
  return bool ? y : n 
end
#create of array
def array(size1,init=nil,size2=-1)
  if size2==-1
      return Array.new(size1){init}
  else
      return Array.new(size2){Array.new(size1){init}}
  end
end

def max(a,b)
    return a>b ? a : b
end

def min(a,b)
    return a>b ? b : a
end

INF=Float::INFINITY

N,X=get_i
$ans=0
def dfs(now,x,burger,paty)
  if x>=1
      x-=1
  else
      return
  end
  if x>=burger[now-1]
      x-=burger[now-1]
      $ans+=paty[now-1]
  else
      dfs(now-1,x,burger,paty)
      return
  end
  if x>=1
      x-=1
      $ans+=1
  else
      return
  end
  if x>=burger[now-1]
      x-=burger[now-1]
      $ans+=paty[now-1]
  else
      dfs(now-1,x,burger,paty)
      return
  end
  if x>=1
      x-=1
  else
      return
  end
end
burger=array(N+1)
burger[0]=1
paty=array(N+1)
paty[0]=1
N.times do|i|
    burger[i+1]=3+burger[i]*2
    paty[i+1]=1+paty[i]*2
end
dfs(N,X,burger,paty)
puts $ans