#include <bits/stdc++.h>
#define int long long
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define F first
#define S second

using namespace std;
using P = pair<int,int>;
using ivec = vector<int>;
using Graph = vector<vector<P>>;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }


const int MOD=1000000007;
int INF=100100100100100;

int a[100010],b[100010],c[100010];
signed main(){
  int n,k;cin>>n>>k;
  if(2*k-n>1){
    cout<<-1<<endl;
    return 0;
  }
  
  int m=(n+1)/2;
  if(n%2==0){
    rep(i,m)a[i]=m+i,b[i]=4*m+i,c[i]=5*m+2*i;
    rep(i,m)a[m+i]=2*m+i,b[m+i]=3*m+i,c[m+i]=5*m+2*i+1;
  }
  else{
    rep(i,m)a[i]=m+i,b[i]=4*m-2+i,c[i]=5*m-2+2*i;
    rep(i,m-1)a[m+i]=2*m+i,b[m+i]=3*m-1+i,c[m+i]=5*m-1+2*i;
  }
  rep(i,n)cout<<a[i]-m+k<<" "<<b[i]-m+k<<" "<<c[i]-m+k<<endl;
  return 0;
}

### Prompt

Generate a CPP solution to 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 <bits/stdc++.h>
#define int long long
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define F first
#define S second

using namespace std;
using P = pair<int,int>;
using ivec = vector<int>;
using Graph = vector<vector<P>>;
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }


const int MOD=1000000007;
int INF=100100100100100;

int a[100010],b[100010],c[100010];
signed main(){
  int n,k;cin>>n>>k;
  if(2*k-n>1){
    cout<<-1<<endl;
    return 0;
  }
  
  int m=(n+1)/2;
  if(n%2==0){
    rep(i,m)a[i]=m+i,b[i]=4*m+i,c[i]=5*m+2*i;
    rep(i,m)a[m+i]=2*m+i,b[m+i]=3*m+i,c[m+i]=5*m+2*i+1;
  }
  else{
    rep(i,m)a[i]=m+i,b[i]=4*m-2+i,c[i]=5*m-2+2*i;
    rep(i,m-1)a[m+i]=2*m+i,b[m+i]=3*m-1+i,c[m+i]=5*m-1+2*i;
  }
  rep(i,n)cout<<a[i]-m+k<<" "<<b[i]-m+k<<" "<<c[i]-m+k<<endl;
  return 0;
}

```