#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i,l,r) for(auto i = (l); i < (r); ++i) #define drep(i,l,r) for(auto i = (r)-1; i >= (l); --i) #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() using namespace std; using uint = unsigned int; using ll = long long; using ull = unsigned long long; using pii = pair; using pli = pair; using pil = pair; using pll = pair; template using Pq = priority_queue; template using pQ = priority_queue, greater>; template inline bool chmin(T& a, const U& b) { if (a > b) { a = b; return true; } return false; } template inline bool chmax(T& a, const U& b) { if (a < b) { a = b; return true; } return false; } inline void yesno(bool p) { if (p) cout << "Yes\n"; else cout << "No\n"; } const int INF = numeric_limits::max(); const ll LINF = numeric_limits::max(); void testcase(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout << fixed << setprecision(20); int T = 1; // cin >> T; rep(i,0,T) testcase(); return 0; } void testcase(){ int n,k; cin>>n>>k; if(k==0){ cout<<-1<<'\n'; return; } vector a(n,vector(n)); int m = n*n-k+1; rep(i,0,n)rep(j,0,n){ a[i][j] = m; m++; if(m>n*n) m = 1; } rep(i,0,n)rep(j,0,n)cout<