#include #define FORE(i, c) for (const auto& i : (c)) #define FOR(i, j, k) for (int i = (j); i < (k); ++i) #define REP(i, j) FOR(i, 0, j) #define ALL(v) begin(v), end(v) #define mp make_pair #define pb push_back #define _1 first #define _2 second #define umap unordered_map #define uset unordered_set #define vec vector using namespace std; typedef long long ll; typedef vec vi; typedef vec vll; typedef pair pll; template inline void amin(T& x, U y) { if (y < x) x = y; } template inline void amax(T& x, U y) { if (y > x) x = y; } template inline bool in(const C& c, const V& v) { return c.find(v) != c.end(); } template inline bool in(const vec& v, const T& t) { return find(ALL(v), t) != end(v); } template inline T sq(T t) { return t * t; } map mem; ll count(vi v) { if (v.size() <= 1) return 0; if (in(mem, v)) return mem[v]; vi l, r; FOR(i, 1, v.size()) if (v[i] < v[0]) l.pb(v[i]); else r.pb(v[i]); return mem[v] = count(l) + count(r) + v.size() - 1; } vi cyc(const vi& v, int amt) { vi v2(v.size()); REP(i, v.size()) v2[(i+amt)%v.size()] = v[i]; return v2; } void dump(const vi& v) { REP(i, v.size()) cout << v[i] << (i == v.size() - 1 ? "\n" : " "); } int main() { int q; cin >> q; REP(i, q) { int len, target; cin >> len >> target; vi v; REP(i, len) v.pb(i+1); ll big = count(v); if (target > big) { cout << -1 << endl; continue; } if (target == big) { dump(v); continue; } vi v2 = cyc(v, (len+1)/2); ll small = count(v2); if (target < small) { cout << -1 << endl; continue; } if (target == small) { dump(v2); continue; } ll high = (len+1)/2, low = 0; while (low < high) { ll mid = high/2 + low/2 + (high & low & 1); v2 = cyc(v, mid); ll c = count(v2); if (c == target) break; if (c > target) low = mid+1; else high = mid; } if (count(v2) == target) dump(v2); else cout << -1 << endl; } return 0; }