#include <iostream>
#include <cmath>

using namespace std;


bool proveri(unsigned long long &a, unsigned long long &b, unsigned long long &i){
  return i * (b ^ i) == a;
}


void uradi(unsigned long long &a, unsigned long long &b){

  unsigned long long granica = sqrt(a) + 1;
  for (unsigned long long i = 1; i < granica; i += 2){
    if (i * (b ^ i) == a){
      cout << i << " " << (b ^ i) << endl;
      return;
    }
  }
  cout << -1 << endl;

  // double d = b * b - 4 * a;
  // unsigned long long i;
  // if (!(d < 0)){
    // d = sqrt(d);
    // if ((unsigned long long)(d * 10) % 10 > 5){
      // d += 1;
    // }
    // if (b != d){
      // i = 2 * a / (b + d);
      // if (proveri(a, b, i)){
        // cout << i << " " << (b ^ i) << endl;
        // return;
      // }
    // }
    // if (b != -d){
      // i = 2 * a / (b - d);
      // if (proveri(a, b, i)){
        // cout << i << " " << (b ^ i) << endl;
        // return;
      // }
    // }
  // }
//
  // d = b * b + 4 * a;
  // if (d < 0){
    // cout << -1 << endl;
    // return;
  // }
  // d = sqrt(d);
  // if ((unsigned long long)(d * 10) % 10 > 5){
    // d += 1;
  // }
  // if (b != d){
    // i = 2 * a / (b + d);
    // if (proveri(a, b, i)){
      // cout << i << " " << (b ^ i) << endl;
      // return;
    // }
  // }
  // if (b != -d){
    // i = 2 * a / (b - d);
    // if (proveri(a, b, i)){
      // cout << i << " " << (b ^ i) << endl;
      // return;
    // }
  // }
  // cout << -1 << endl;

}




int main(){

  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  unsigned long long n;
  unsigned long long a, b;

  cin >> n;

  for (long long i = 0; i < n; ++i){
    cin >> a >> b;
    uradi(a, b);
  }


  return 0;
}