#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int mn = 1e7+5;

using ll = long long;

struct X
{
    int a,b,c;
};

vector<X> ans;
set<ll> s;
ll hh;

ll work()
{
    while (s.count(hh)==1) hh++;
    return hh;
}

int main()
{
    ll n,k,i,j,kk;
    scanf("%lld%lld",&n,&k);
    if (n<k*2-1)
    {
        printf("-1\n");
        return 0;
    }
    j=1;
    s.clear();
    hh=k+2*n;
    for (i=2*n-k+2;i<=n*2;i++)
    {
        X p;
        p.a=i+(k-1);
        p.b=j+(k-1);
        p.c=p.a+p.b;
        s.insert(p.c);
        ans.push_back(p);
        j++;
    }
    for (i=j;i<=(n*2-k+1+j)/2;i++)
    {
        X p;
        p.a=i+(k-1);
        p.b=i+(n*2-k+2-j)/2+(k-1);
        p.c=work();
        hh++;
        ans.push_back(p);
    }
    for (i=0;i<ans.size();i++)
        printf("%lld %lld %lld\n",ans[i].a,ans[i].b,ans[i].c);
    return 0;
}

### Prompt

Your task is to create 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>
using namespace std;
typedef long long ll;

const int mn = 1e7+5;

using ll = long long;

struct X
{
    int a,b,c;
};

vector<X> ans;
set<ll> s;
ll hh;

ll work()
{
    while (s.count(hh)==1) hh++;
    return hh;
}

int main()
{
    ll n,k,i,j,kk;
    scanf("%lld%lld",&n,&k);
    if (n<k*2-1)
    {
        printf("-1\n");
        return 0;
    }
    j=1;
    s.clear();
    hh=k+2*n;
    for (i=2*n-k+2;i<=n*2;i++)
    {
        X p;
        p.a=i+(k-1);
        p.b=j+(k-1);
        p.c=p.a+p.b;
        s.insert(p.c);
        ans.push_back(p);
        j++;
    }
    for (i=j;i<=(n*2-k+1+j)/2;i++)
    {
        X p;
        p.a=i+(k-1);
        p.b=i+(n*2-k+2-j)/2+(k-1);
        p.c=work();
        hh++;
        ans.push_back(p);
    }
    for (i=0;i<ans.size();i++)
        printf("%lld %lld %lld\n",ans[i].a,ans[i].b,ans[i].c);
    return 0;
}

```