#include <iostream>
#include <string>
#include <algorithm>
#include <limits>
#include <iomanip>
#include <cmath>
#include <functional>

using namespace std;

typedef numeric_limits<streamsize> ignore_t;

struct Parovi 
{
	int A;
	int B;
	int ne_postoji{1};
};

Parovi* Luxor(Parovi AB[], int T) 
{
	Parovi *XY = new Parovi[T];

	for (int i{}; i < T; ++i)
	{
		for (int j{ 3 }; j <= 7; j += 2)
		{
			if (AB[i].A % j == 0)
			{
				if (((AB[i].A / j) ^ j) == AB[i].B)
				{
					XY[i].A = AB[i].A / j;
					XY[i].B = j;
					XY[i].ne_postoji = 1;
				}
				else
				{
					XY[i].ne_postoji = -1;
				}
			}
			else 
			{
				XY[i].ne_postoji = -1;
			}
		}
	}

	return XY;
}

int main()
{
	int T{};

	Parovi *AB = new Parovi[T];
	

	cout << (3^3);

	scanf_s("%d", &T);

	for (int i{}; i < T; ++i) 
	{
		scanf_s("%d %d", &AB[i].A, &AB[i].B);
	}
	
	Parovi *XY = Luxor(AB, T);

	for (int i{}; i < T; ++i)
	{
		if (XY[i].ne_postoji == -1)
			cout << XY[i].ne_postoji << '\n';
		else 
		{
			cout << XY[i].A << ' ' << XY[i].B << '\n';
		}
	}

	cin.clear();
	cin.ignore(ignore_t::max(), '\n');
	cin.get();

	return 0;
}