#include <iostream>
using namespace std;

const int BR_SETOVA_ZA_POBEDU = 3;

bool moze_u_k_setova(int k, unsigned long long n, unsigned long long a)
{
	if (n / k < a)
	{
		return false;
	}
	else
	{
		// (1) n = q * k + n % k = q * (k - 1) + r
		int q = n / k;
		int r = q + n % k;

		// Ako ne moramo da prelazimo A za broj bodova da bi smo napravili rezultat
		// Mozemo samo da za svaki set pobedniku damo A bodova, a gubitniku dajemo
		// Broj bodova tako da dopunimo do N

		// Dokaz: (a + (q - a)) * (k - 1) + r = q * (k - 1) + r = n (iz (1))
		if (r < a + (a - 2))
		{
			// Drugi tim pobedjuje 2 puta
			for (int i = 0; i < BR_SETOVA_ZA_POBEDU - 1; i++)
			{
				cout << a << " " << q - a << endl;
			}
			// Prvi tim pobedjuje k - 3 puta
			for (int i = 0; i < (k - (BR_SETOVA_ZA_POBEDU - 1)) - 1; i++)
			{
				cout << q - a << " " << a << endl;
			}
			// Drugi tim pobedjuje jos jednom
			cout << a << " " << r - a << endl;

			// 2 + k - 3 + 1 = k
		}
		// Ako moramo da prelazimo A za broj bodova da bi smo napravili rezultat
		// Mozemo samo da za svaki set pobedniku damo q / 2 + 1 bodova, a gubitniku dajemo
		// za 2 manje, tj. q / 2 - 1 bodova; jedino u poslednjem setu pobedniku dajemo
		// r / 2 + 1, a gubitniku r / 2 - 1

		// Dokaz: ((q / 2 - 1) + (q / 2 + 1)) * (k - 1) + (r / 2 - 1 + r / 2 + 1) = q * (k - 1) + r = n (iz (1))
		else
		{
			// Ako q i r nisu parni, q / 2 i r / 2 nisu celi brojevi i valjda ne moze
			// da se napravi (nisam siguran za ovo)
			// ??????????????????????????
			if (q % 2 != 0 || r % 2 != 0)
				return false;
			else
			{
				// Drugi tim pobedjuje 2 puta
				for (int i = 0; i < BR_SETOVA_ZA_POBEDU - 1; i++)
				{
					cout << q / 2 - 1 << " " << q / 2 + 1 << endl;
				}
				// Prvi tim pobedjuje k - 3 puta
				for (int i = 0; i < (k - (BR_SETOVA_ZA_POBEDU - 1)) - 1; i++)
				{
					cout << q / 2 + 1 << " " << q / 2 - 1 << endl;
				}
				// Drugi tim pobedjuje jos jednom
				cout << r / 2 - 1 << " " << r / 2 + 1 << endl;

				// 2 + k - 3 + 1 = k
			}
		}
	}
	return true;
}

int main()
{
	unsigned long long n, a;
	cin >> n >> a;

	if (moze_u_k_setova(3, n, a))
		return 0;
	else if (moze_u_k_setova(4, n, a))
		return 0;
	else if (moze_u_k_setova(5, n, a))
		return 0;
	else
		cout << -1 << endl;

	return 0;
}