#include<bits/stdc++.h>
using namespace std;
long long n,k;
long long bjt[100]={
0,1,2,3,7,6,5,4,12,13,14,15,11,10,9,8,16,17,18,19,23,22,21,20,28,29,30,31,27,26,25,24,
};
long long a[100]={
1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,2251799813685248,4503599627370496,9007199254740992,18014398509481984,36028797018963968,72057594037927936,144115188075855872,288230376151711744,576460752303423488,1152921504606846976,2305843009213693952,4611686018427387904
};
long long sss[100],cnt=0;
inline long long read(){
char ch=getchar();
long long f=1,x=0;
while(ch<'0' || ch>'9'){
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
long long dfs(long long x,long long y){
long long ans=0;
if(bjt[x] || x==0) return bjt[x];
else{
long long yy=y;
while(x-a[y-1]<0) y--;
ans=dfs(x-a[y-1],y-1)+a[y-1];
for(long long i=y;i<=yy && a[i]<=x;i++){
ans+=a[i];
}
}
return ans;
}
void ks(long long x){
while(x){
cnt++;
if(x&1) sss[cnt]=1;
x>>=1;
}
for(long long i=n;i>=1;i--){
printf("%lld",sss[i]);
}
return;
}
int main(){
//freopen("code.in","r",stdin);
// freopen("code.out","w",stdout);
n=read(); k=read();
ks(dfs(k-1,n));
return 0;
}