#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	char c=getchar();bool f=0;x=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return x;
}
template<class t,class ...A> inline void read(t &x,A &...a){
	read(x);read(a...);
}
template<class t> inline void write(t x){
	if(x<0) putchar('-'),write(-x);
	else{if(x>9) write(x/10);putchar('0'+x%10);}
}

const int N=1e6+5;
int n,k,a[N],b[N],c[N];

signed main(){
	read(n,k);
	if(n<2*k-1) return write(-1),0;
	int s=(n+1>>1)*3;
	if(n&1) s--;
	for(int i=1,x=1,y=s;i<=n;i++,x+=2,y--){
		a[i]=x;b[i]=y;
		if(x+2>=y-1) x=0,y=2*n+1;
	}
	for(int i=1;i<=n;i++) c[i]=2*n+i;
	for(int i=1;i<=n;i++) printf("%d %d %d\n",a[i]+k-1,b[i]+k-1,c[i]+k-1);
}
### Prompt

Create a solution in CPP for 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
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	char c=getchar();bool f=0;x=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return x;
}
template<class t,class ...A> inline void read(t &x,A &...a){
	read(x);read(a...);
}
template<class t> inline void write(t x){
	if(x<0) putchar('-'),write(-x);
	else{if(x>9) write(x/10);putchar('0'+x%10);}
}

const int N=1e6+5;
int n,k,a[N],b[N],c[N];

signed main(){
	read(n,k);
	if(n<2*k-1) return write(-1),0;
	int s=(n+1>>1)*3;
	if(n&1) s--;
	for(int i=1,x=1,y=s;i<=n;i++,x+=2,y--){
		a[i]=x;b[i]=y;
		if(x+2>=y-1) x=0,y=2*n+1;
	}
	for(int i=1;i<=n;i++) c[i]=2*n+i;
	for(int i=1;i<=n;i++) printf("%d %d %d\n",a[i]+k-1,b[i]+k-1,c[i]+k-1);
}
```