#include #include #include #define rep(i,a,b) for (int i = a; i < b; i++) #define mp make_pair #define pii pair #define pb push_back #define pll pair #define fi first #define se second #define blahaj ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; using namespace __gnu_pbds; typedef tree,rb_tree_tag,tree_order_statistics_node_update> ordered_set; typedef tree, null_type, less>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset; typedef vector vi; typedef vector vs; typedef vector vll; typedef long long ll; typedef long double ld; ll mod = 1000000007; const int N = 200000; const int dx[4]{1, 0, -1, 0}, dy[4]{0, 1, 0, -1}; const char dir[4]{'D','R','U','L'}; #define all(x) begin(x), end(x) string yes = "YES\n"; string no = "NO\n"; int inf = 1e9; int main() { blahaj; ll n, k; cin >> n >> k; if (k < n - 1 || k > n * (n - 1) / 2) cout << "-1\n"; else { ll cur = n - 1; vector used(n + 1, false); used[1] = true; used[n] = true; vector ans; ans.pb(1); ans.pb(n); ll last = n; ll lo = 1; ll hi = n; ll need = k - cur; while (need) { // cout << "NEED " << need << ' ' << lo << ' ' << hi << "\n"; if (last == hi) { lo++; ll mxdiff = hi - lo; if (mxdiff >= need) { ll val = hi - need; ans.pb(val); need = 0; used[val] = true; } else { need -= mxdiff; ans.pb(lo); used[lo] = true; } last = lo; } else { hi--; ll mxdiff = hi - lo; if (mxdiff >= need) { ll val = lo + need; ans.pb(val); need = 0; used[val] = true; } else { need -= mxdiff; used[hi] = true; ans.pb(hi); } last = hi; } } cout << 1 << " "; for (int i = 1; i <= n; i++) if (!used[i]) cout << i << ' '; for (int i = 1; i < ans.size(); i++) cout << ans[i] << ' '; cout << "\n"; } }