#include #include #include #include #include #include #include using namespace std; #define LL long long template void read (T &x) { x = 0; T f = 1; char ch = getchar (); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar (); } while (ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + ch - '0'; ch = getchar (); } x *= f; } template void write (T x) { if (x < 0) { x = -x; putchar ('-'); } if (x < 10) { putchar (x + '0'); return; } write (x / 10); putchar (x % 10 + '0'); } template void print (T x, char ch) { write (x); putchar (ch); } template T Min (T x, T y) { return x < y ? x : y; } template T Max (T x, T y) { return x > y ? x : y; } template T Abs (T x) { return x > 0 ? x : -x; } int t; LL a, b; int main () { read (t); while (t--) { read (a); read (b); if (a > b) swap (a, b); if (a == b) { if (a == 1) printf ("-1 -1\n"); else printf ("2 %lld\n", a); continue; } LL _max, _min; _max = _min = b - a; for (LL i = 2; i * i <= _max; i++) { if (_max % i == 0) { _min = i; break; } } if (_min == 1) printf ("-1 -1\n"); else printf ("%lld %lld\n", _min, _max); } return 0; }