#include <bits/stdc++.h>
using namespace std;
string Ternary_representation = "";
bool visited[1];
long long mod = 1e9 + 7;
bool isVowel(char c) {
  if (c != 'a' && c != 'o' && c != 'u' && c != 'e' && c != 'i') {
    return false;
  } else {
    return true;
  }
}
bool isConst(char c) {
  if (c != 'a' && c != 'o' && c != 'u' && c != 'e' && c != 'i') {
    return true;
  } else {
    return false;
  }
}
bool cmp_x(pair<long long, long long> a, pair<long long, long long> b) {
  if (a.first == b.first) {
    return a.second < b.second;
  }
  return a.first < b.first;
}
bool cmp_y(pair<int, int> a, pair<int, int> b) {
  if (a.second == b.second) {
    return a.first < b.first;
  }
  return a.second < b.second;
}
bool cmp(int a, int b) { return abs(a) > abs(b); }
bool sort_by_third(pair<pair<long long, long long>, long long> a,
                   pair<pair<long long, long long>, long long> b) {
  return a.second > b.second;
}
bool isprime(int n) {
  if (n == 1) {
    return false;
  }
  if (n <= 3) {
    return true;
  }
  if (n % 2 == 0) {
    return false;
  }
  if (n % 3 == 0) {
    return false;
  }
  for (int i = 5; i * i <= n; i += 4) {
    if (n % i == 0) {
      return false;
    }
    if (n % (i + 2) == 0) {
      return false;
    }
  }
  return true;
}
bool isThere(vector<pair<int, int> > arr, pair<int, int> x, long long left,
             long long right) {
  if (left > right) {
    return false;
  }
  long long mid = (left + right) / 2;
  if (arr[mid] < x) {
    return isThere(arr, x, mid + 1, right);
  }
  if (arr[mid] > x) {
    return isThere(arr, x, left, mid - 1);
  }
  if (arr[mid] == x) {
    return true;
  }
  return false;
}
long long binarySearch(long long arr[], long long x, int size) {
  long long left = 0, right = size - 1;
  while (left <= right) {
    long long mid = (left + right) / 2;
    if (arr[mid] > x) {
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return left;
}
long long power(long long a, long long b) {
  if (b == 0) {
    return 1;
  }
  long long ret = power(a, b / 2);
  ret *= ret;
  if (b & 1) {
    ret *= a;
  }
  return ret;
}
bool sort_strings_by_size(string a, string b) { return a.size() < b.size(); }
long long gcd(long long a, long long b) {
  if (a > b) {
    long long mmry = a;
    a = b;
    b = mmry;
  }
  if (a == 0) {
    return b;
  }
  gcd(a, b % a);
}
void init_toTernary(unsigned long long n) {
  if (n == 0) {
    return;
  }
  char x = (n % 3) + '0';
  Ternary_representation += x;
  n /= 3;
  init_toTernary(n);
  return;
}
void toTernary(unsigned long long n) {
  init_toTernary(n);
  reverse(Ternary_representation.begin(), Ternary_representation.end());
}
class Stack {
  vector<int> n;

 public:
  Stack() {}
  void push(int a);
  void pop();
  int size();
  bool isempty();
  int front();
};
void Stack::push(int a) {
  n.push_back(a);
  return;
}
void Stack::pop() {
  n.pop_back();
  return;
}
int Stack::size() { return n.size(); }
bool Stack::isempty() {
  if (n.size() == 0) {
    return true;
  } else {
    return false;
  }
}
int Stack::front() { return n[n.size() - 1]; }
class Graph {
  int numberOfVertices;
  vector<vector<int> > adjacencyList;
  int dfss(int s, long long arr[]) {
    visited[s] = true;
    long long ret = arr[s];
    for (int u = 0; u < adjacencyList[s].size(); u++) {
      if (!visited[adjacencyList[s][u]]) {
        ret = min(1ll * dfss(adjacencyList[s][u], arr), ret);
      }
    }
    return ret;
  }

 public:
  Graph(long long v) : numberOfVertices(v), adjacencyList(v) {}
  void insertEdge(int u, int v);
  vector<int> show(int v);
  void resize(int v);
  long long dfs(long long arr[]);
};
void Graph::insertEdge(int u, int v) {
  adjacencyList[u].push_back(v);
  return;
}
vector<int> Graph::show(int v) { return adjacencyList[v]; }
void Graph::resize(int v) {
  adjacencyList.resize(v);
  numberOfVertices = v;
}
long long Graph::dfs(long long arr[]) {
  long long cnt = 0;
  for (int i = 0; i < numberOfVertices; i++) {
    if (!visited[i]) cnt += dfss(i, arr);
  }
  return cnt;
}
int main() {
  int n, m;
  cin >> n >> m;
  if (n >= m + 2) {
    cout << -1;
  } else if (m > (2 * n) + 2) {
    cout << -1;
  } else {
    if (n - 1 == m) {
      cout << 0;
      for (long long i = 1; i < n + m; i += 2) {
        cout << 10;
      }
    } else if (n == m) {
      for (long long i = 0; i < n + m; i += 2) {
        cout << 10;
      }
    } else {
      for (long long i = 0; i < min(n, m - n); i += 1) {
        cout << 110;
      }
      if (m <= 2 * n) {
        for (long long i = 3 * (m - n) + 1; i < m + n; i += 2) {
          cout << 10;
        }
      } else {
        if (m - 1 == 2 * n) {
          cout << 1;
        } else {
          cout << 11;
        }
      }
    }
  }
}
