#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 16);
int rev[MAXN];
int revers(int k, int n) {
  if (n % 2 == 0)
    return (rev[k & ((1 << (n / 2)) - 1)] << (n / 2)) + rev[k >> (n / 2)];
  return (rev[k & ((1 << (n / 2)) - 1)] << (n / 2 + 1)) +
         rev[k >> (n / 2 + 1)] + (k & (1 << (n / 2)));
}
void print(int k, int n) {
  vector<int> v;
  for (int i = 0; (i) < (n); ++i) v.push_back(k % 2), k /= 2;
  reverse((v).begin(), (v).end());
  for (auto k : v) printf("%d", k);
}
int main() {
  int n;
  long long k;
  scanf(
      "%d"
      "%lld",
      &n, &k);
  k++;
  for (int i = 0; i < (1 << (n / 2 / 2)); i++) {
    int k = i;
    int ans = 0;
    for (int j = 0; (j) < (n / 2 / 2); ++j) ans = ans * 2 + k % 2, k /= 2;
    rev[i] = ans;
  }
  if (n % 2 == 0) {
    int N = 1 << (n / 2);
    for (int i = 0; i < N; i++)
      if (k > N - 2 * i)
        k -= N - 2 * i;
      else {
        for (int j = 0; (j) < (N); ++j)
          if (revers(j, n / 2) >= i && revers(N - j - 1, n / 2) >= i) {
            k--;
            if (k == 0) {
              print(i, n / 2);
              print(j, n / 2);
              return 0;
            }
          }
      }
  } else {
    int N = 1 << (n / 2);
    for (int i = 0; i < N; i++)
      if (k > 2 * (N - 2 * i) - 1)
        k -= 2 * (N - 2 * i) - 1;
      else {
        for (int g = 0; (g) < (2); ++g)
          for (int j = 0; (j) < (N); ++j)
            if (revers(j, n / 2) >= i && revers(N - j - 1, n / 2) >= i + g) {
              k--;
              if (k == 0) {
                print(i, n / 2);
                printf("%d", g);
                print(j, n / 2);
                return 0;
              }
            }
      }
  }
  if (k > 0) puts("-1");
  return 0;
}
