#include <algorithm>
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

long long N, K;

int main() {
    cin >> N >> K;

    if (K * N > N * (N + 1) / 2) {
        cout << -1 << '\n';
        return 0;
    }

    vector<pair<int, int>> AB;

    for (int i = 0; i < N; i++)
        AB.emplace_back(i, 2 * N - 1 - i);

    int need = (N - 1) / 2;
    int start = 0;

    for (int d = need; d > 0; d -= 2) {
        swap(AB[start].first, AB[start + d].first);
        start++;
    }

    start = need + 1;

    for (int d = need - 1; d > 0; d -= 2) {
        swap(AB[start].first, AB[start + d].first);
        start++;
    }

    auto compare_sum = [&](pair<int, int> x, pair<int, int> y) {
        return x.first + x.second < y.first + y.second;
    };

    sort(AB.begin(), AB.end(), compare_sum);

    for (int i = 0; i < N; i++)
        cout << AB[i].first + K << ' ' << AB[i].second + K << ' ' << 2 * N + i + K << '\n';
}

### Prompt

In cpp, your task is to solve the following problem:

Given are positive integers N and K.

Determine if the 3N integers K, K+1, ..., K+3N-1 can be partitioned into N triples (a_1,b_1,c_1), ..., (a_N,b_N,c_N) so that the condition below is satisfied. Any of the integers K, K+1, ..., K+3N-1 must appear in exactly one of those triples.

* For every integer i from 1 to N, a_i + b_i \leq c_i holds.



If the answer is yes, construct one such partition.

Constraints

* 1 \leq N \leq 10^5
* 1 \leq K \leq 10^9

Input

Input is given from Standard Input in the following format:


N K


Output

If it is impossible to partition the integers satisfying the condition, print `-1`. If it is possible, print N triples in the following format:


a_1 b_1 c_1
:
a_N b_N c_N

Output

If it is impossible to partition the integers satisfying the condition, print `-1`. If it is possible, print N triples in the following format:


a_1 b_1 c_1
:
a_N b_N c_N

Examples

Input

1 1


Output

1 2 3


Input

3 3


Output

-1

### Response

```cpp
#include <algorithm>
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;

long long N, K;

int main() {
    cin >> N >> K;

    if (K * N > N * (N + 1) / 2) {
        cout << -1 << '\n';
        return 0;
    }

    vector<pair<int, int>> AB;

    for (int i = 0; i < N; i++)
        AB.emplace_back(i, 2 * N - 1 - i);

    int need = (N - 1) / 2;
    int start = 0;

    for (int d = need; d > 0; d -= 2) {
        swap(AB[start].first, AB[start + d].first);
        start++;
    }

    start = need + 1;

    for (int d = need - 1; d > 0; d -= 2) {
        swap(AB[start].first, AB[start + d].first);
        start++;
    }

    auto compare_sum = [&](pair<int, int> x, pair<int, int> y) {
        return x.first + x.second < y.first + y.second;
    };

    sort(AB.begin(), AB.end(), compare_sum);

    for (int i = 0; i < N; i++)
        cout << AB[i].first + K << ' ' << AB[i].second + K << ' ' << 2 * N + i + K << '\n';
}

```