// C++11 program
// -*- coding: utf-8 -*-
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;

void solve_test() {
    // Rozwiąż pojedynczy przypadek testowy.
    int task_a, task_b;
    int ans_p, ans_q;
    cin >> task_a >> task_b;
    if(task_a % (task_b + 1) == 0) {
        // Przypadek I: (p - 1) jest dzielnikiem (q - 1)
        ans_p = task_b + 1;
        ans_q = task_a / ans_p;
        if(ans_p > ans_q) {
            swap(ans_p, ans_q);
        }
    } else {
        // Przypadek II: znamy iloczyn i sumę zaginionych liczb
        int pq_sum = task_a % task_b + 1;
        int pq_diff = sqrt(
            pq_sum * int64_t(pq_sum) - 4 * int64_t(task_a)) + 0.5;
        ans_p = (pq_sum - pq_diff) / 2;
        ans_q = ans_p + pq_diff;
    }
    // Uwaga o wydajności: warto stosować '\n', a nie endl, aby nie czyścić bufora.
    cout << ans_p << ' ' << ans_q << '\n';
}

int main() {
    // Rozwiąż wszystkie testy.
    // Ustawienia wydajności strumieni
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int tests;
    cin >> tests;
    for(int i = 0; i < tests; i++) {
        solve_test();
    }
    return 0;
}
