#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
set<int> se;
struct node{
    int a,b,c;
};
node Anx[N];
bool check(int n,int k){
    ll x1=1ll*(k+k+n-1)*n/2;
    ll x2=1ll*(k+n+k+2*n-1)*n/2;
    ll x3=1ll*(k+2*n+k+3*n-1)*n/2;
    return x1+x2>x3;
}
int main(){
    int n,k;
    scanf("%d %d",&n,&k);
    if(check(n,k)){
        puts("-1");
        return 0;
    }
    for(int i=n;i<=2*n-1;++i){
        se.insert(i+k);
    }
    for(int i=1;i<=n;++i){
        Anx[i].c=k+2*n+i-1;
    }
    for(int i=1,j=k;i<=n;++i){
        Anx[i].a=j;
        j+=2;
        if(j>k+n-1) j=k+1;
    }
    for(int i=1;i<=n;++i){
        int bb=Anx[i].c-Anx[i].a;
        auto pos=se.lower_bound(bb+1);
        if(pos==se.begin()){
            puts("-1");
            return 0;
        }
        pos--;
        Anx[i].b=*pos;
        se.erase(pos);
    }
    for(int i=1;i<=n;++i){
        printf("%d %d %d\n",Anx[i].a,Anx[i].b,Anx[i].c);
    }
}

### Prompt

Please provide a Cpp coded solution to the problem described below:

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<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
typedef long long ll;
set<int> se;
struct node{
    int a,b,c;
};
node Anx[N];
bool check(int n,int k){
    ll x1=1ll*(k+k+n-1)*n/2;
    ll x2=1ll*(k+n+k+2*n-1)*n/2;
    ll x3=1ll*(k+2*n+k+3*n-1)*n/2;
    return x1+x2>x3;
}
int main(){
    int n,k;
    scanf("%d %d",&n,&k);
    if(check(n,k)){
        puts("-1");
        return 0;
    }
    for(int i=n;i<=2*n-1;++i){
        se.insert(i+k);
    }
    for(int i=1;i<=n;++i){
        Anx[i].c=k+2*n+i-1;
    }
    for(int i=1,j=k;i<=n;++i){
        Anx[i].a=j;
        j+=2;
        if(j>k+n-1) j=k+1;
    }
    for(int i=1;i<=n;++i){
        int bb=Anx[i].c-Anx[i].a;
        auto pos=se.lower_bound(bb+1);
        if(pos==se.begin()){
            puts("-1");
            return 0;
        }
        pos--;
        Anx[i].b=*pos;
        se.erase(pos);
    }
    for(int i=1;i<=n;++i){
        printf("%d %d %d\n",Anx[i].a,Anx[i].b,Anx[i].c);
    }
}

```