#pragma GCC optimize("Ofast") #include #define ud unsigned int #define ll long long #define ull unsigned long long #define MAX_INF 0x3f #define MAX_INF_VAL 0x3f3f3f3f #define MAX_INF_VAL_LL 0x3f3f3f3f3f3f3f3f //#define pi 3.141592653589 #define eps 1e-9 #define F(x) ((x)/3+((x)%3==1?0:tb)) #define G(x) ((x) void read( T &x ) { x = 0; char ch = getchar(); ll f = 1; while( !isdigit( ch ) ) { if( ch == '-' ) f *= -1; ch = getchar(); } while( isdigit( ch ) ) { x = x * 10 + ch - 48; ch = getchar(); } x *= f; } struct custom_hash { static uint64_t splitmix64( uint64_t x ) { x += 0x9e3779b97f4a7c15; x = ( x ^ ( x >> 30 ) ) * 0xbf58476d1ce4e5b9; x = ( x ^ ( x >> 27 ) ) * 0x94d049bb133111eb; return x ^ ( x >> 31 ); } size_t operator() ( uint64_t x ) const { static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count(); return splitmix64( x + FIXED_RANDOM ); } }; int main() { ios::sync_with_stdio( false ); cin.tie( 0 ), cout.tie( 0 ); int t; cin >> t; while( t-- ) { int n, m; cin >> n >> m; if( n == m ) { if( n == 1 ) cout << -1 << ' ' << -1 << '\n'; else cout << 2 << ' ' << n << '\n'; continue; } if( n < m ) swap( n, m ); int ma = -1, mi = 2e9; int tmp = n - m; for( int i = 1; i * i <= tmp; ++i ) { if( tmp % i ) continue; if( i > 1 && n % i == m % i ) { ma = max( ma, i ); mi = min( mi, i ); } int fk = tmp / i; if( fk > 1 && n % fk == m % fk ) { ma = max( ma, fk ); mi = min( mi, fk ); } } if( mi == 2e9 ) mi = -1; cout << mi << ' ' << ma << '\n'; } return 0; }