Problem: Convexity of a set of points on the plane is the size of the largest subset of points that form a convex polygon. Your task is to build a set of n points with the convexity of exactly m. Your set of points should not contain three points that lie on a straight line.

Input

The single line contains two integers n and m (3 ≤ m ≤ 100, m ≤ n ≤ 2m).

Output

If there is no solution, print "-1". Otherwise, print n pairs of integers — the coordinates of points of any set with the convexity of m. The coordinates shouldn't exceed 108 in their absolute value.

Examples

Input

4 3


Output

0 0
3 0
0 3
1 1


Input

6 3


Output

-1


Input

6 6


Output

10 0
-10 0
10 1
9 1
9 -1
0 -2


Input

7 4


Output

176166 6377
709276 539564
654734 174109
910147 434207
790497 366519
606663 21061
859328 886001

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 300;
const int inf = (int)1e9;
const int X = 1e6;
const int step = 1e3;
struct pnt {
  int x, y;
  pnt() {}
  pnt(int x, int y) : x(x), y(y){};
  pnt operator+(pnt A) { return pnt(x + A.x, y + A.y); }
  pnt operator-(pnt A) { return pnt(x - A.x, y - A.y); }
  long long operator*(pnt A) { return x * 1ll * A.y - y * 1ll * A.x; }
  pnt operator*(int k) { return pnt(x * k, y * k); }
  void print() { printf("%d %d\n", x, y); }
  void Epr() { ("%d %d\n", x, y); }
};
pnt a[maxn];
pnt b[maxn];
int main() {
  int n, m, cur = 0;
  pnt p, d;
  cin >> n >> m;
  if ((n == 6 || n == 5) && m == 3) {
    cout << -1 << endl;
    return 0;
  }
  a[0] = pnt(X - 1, -1);
  b[0] = pnt(X + X - 1, -2);
  a[1] = pnt(-1, -X + 1);
  b[1] = pnt(-2, -X + 1 - X);
  a[2] = pnt(-X, 1);
  b[2] = pnt(-X - X, 2);
  a[3] = pnt(1, X);
  b[3] = pnt(2, X + X);
  cur = 4;
  p = a[3];
  for (int i = 1; cur < m; cur++, i++) {
    d = pnt(step, -i);
    p = p + d;
    a[cur] = p;
  }
  for (int i = 4; i < m; i++) b[i] = a[i] * 2;
  for (int i = m; i < n; i++) b[i] = a[i - m];
  for (int i = 0; i < n; i++) b[i].print();
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++)
        if ((b[j] - b[i]) * (b[k] - b[i]) == 0) {
          b[i].Epr();
          b[j].Epr();
          b[k].Epr();
          assert(false);
        }
  return 0;
}