#include <bits/stdc++.h>
using namespace std;
long long two(int x) { return 1LL << x; }
int get(long long p, int i) { return (p >> (i - 1)) & 1; }
long long count(int n, int k, long long pre) {
  long long ret = 0;
  bool rev = true, inv = true;
  for (int i = 1; i + i <= n; i++) {
    if (i <= k && n - i + 1 <= k && get(pre, i) != get(pre, n - i + 1))
      rev = false;
    if (rev)
      if (n - 2 * i == 0)
        ret += two(max(0, i - k));
      else if (n - 2 * i == 1)
        ret += two(max(0, i + 1 - k));
      else if ((i >= k || !get(pre, i + 1)) &&
               (n - i - 1 >= k || get(pre, n - i)))
        ret += two(max(0, n - i - 1 - k - (k <= i)));
    if (i <= k && n - i + 1 <= k && get(pre, i) == get(pre, n - i + 1))
      inv = false;
    if (inv)
      if (n - 2 * i == 0)
        ret += two(max(0, i - k));
      else if (n - 2 * i == 1) {
        if (i >= k || !get(pre, i + 1)) ret += two(max(0, i - k));
      } else if ((i >= k || !get(pre, i + 1)) &&
                 (n - i - 1 >= k || !get(pre, n - i)))
        ret += two(max(0, n - i - 1 - k - (k <= i)));
  }
  return ret;
}
int main() {
  int n;
  long long m;
  cin >> n >> m;
  if (m >= count(n, 1, 0LL)) {
    cout << -1 << endl;
    return 0;
  }
  long long pre = 0;
  for (int i = 2; i <= n; i++) {
    long long tmp = count(n, i, pre);
    if (m >= tmp) {
      m -= tmp;
      pre += two(i - 1);
    }
  }
  for (int i = 1; i <= n; i++) cout << get(pre, i);
  cout << endl;
}
