#include <bits/stdc++.h>
#pragma comment(linker, "/stack:640000000")
using namespace std;
const double EPS = 1e-9;
const int INF = 0x7f7f7f7f;
const double PI = acos(-1.0);
template <class T>
inline T gcd(T a, T b) {
  return (b) == 0 ? (a) : gcd((b), ((a) % (b)));
}
template <class T>
inline T lcm(T a, T b) {
  return ((a) / gcd((a), (b)) * (b));
}
template <typename T>
string NumberToString(T Number) {
  ostringstream second;
  second << Number;
  return second.str();
}
struct debugger {
  template <typename T>
  debugger& operator,(const T& v) {
    cerr << v << " ";
    return *this;
  }
} dbg;
int t, n, m;
int arr[105][105];
int main() {
  while (~scanf("%d%d", &n, &m)) {
    if (m > n * n) {
      puts("-1");
      continue;
    }
    memset(arr, 0, sizeof(arr));
    int row = 1, col = 1;
    while (m) {
      while (arr[row][col]) {
        col++;
        if (col > n) {
          row++;
          col = row;
        }
      }
      if (row > n) {
        puts("-1");
        return 0;
      }
      if (m == 1) {
        int cnt = 1;
        while (arr[cnt][cnt]) cnt++;
        arr[cnt][cnt] = 1;
        m--;
      } else {
        arr[row][col] = 1;
        arr[col][row] = 1;
        m--;
        if (row != col) m--;
      }
      col++;
      if (col > n) {
        row++;
        col = row;
      }
    }
    for (int i = 1; i <= (n); i++) {
      for (int j = 1; j <= (n); j++) printf("%d ", arr[i][j]);
      puts("");
    }
  }
  return 0;
}
