#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = (int)1e6 + 5;
ll cnt[N], sum[N];
void sieve() {
for (int i = 1; i < N; i++) { // O(NlogN)
// j bổ sung i làm ước
for (int j = i; j < N; j += i) cnt[j] += 1, sum[j] += i;
}
for (int i = 2; i < N; i++) { // O(N)
cnt[i] += cnt[i - 1];
sum[i] += sum[i - 1];
}
// O(NlogN + N)
}
// a[5] = {1, 2, 3, 4, 5}
// sum[] ={0, 1, 3, 6, 10, 15} // O(N)
// sum[i] là tổng các phần tử từ 1 đến i trên mảng a
// lấy tổng trong đoạn [L, R] = sum[R] - sum[L - 1] // O(1)
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
sieve(); // O(NlogN)
while (T--) {
int x, y;
cin >> x >> y;
ll cnt_div = cnt[y] - cnt[x - 1]; // O(1)
ll sum_div = sum[y] - sum[x - 1]; // O(1)
cout << cnt_div << ' ' << sum_div << '\n';
} // O(T)
// O(NlogN + N + T)
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7IAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7IAoKY29uc3QgaW50IE4gPSAoaW50KTFlNiArIDU7IAoKbGwgY250W05dLCBzdW1bTl07IAoKdm9pZCBzaWV2ZSgpIHsKCWZvciAoaW50IGkgPSAxOyBpIDwgTjsgaSsrKSB7IC8vIE8oTmxvZ04pCgkJLy8gaiBi4buVIHN1bmcgaSBsw6BtIMaw4bubYwoJCWZvciAoaW50IGogPSBpOyBqIDwgTjsgaiArPSBpKSBjbnRbal0gKz0gMSwgc3VtW2pdICs9IGk7IAoJfQoJCglmb3IgKGludCBpID0gMjsgaSA8IE47IGkrKykgeyAvLyBPKE4pCgkJY250W2ldICs9IGNudFtpIC0gMV07IAoJCXN1bVtpXSArPSBzdW1baSAtIDFdOyAKCX0KCS8vIE8oTmxvZ04gKyBOKQp9CgovLyBhWzVdID0gICAgIHsxLCAyLCAzLCA0LCA1fQovLyBzdW1bXSA9ezAsIDEsIDMsIDYsIDEwLCAxNX0gLy8gTyhOKQovLyBzdW1baV0gbMOgIHThu5VuZyBjw6FjIHBo4bqnbiB04butIHThu6sgMSDEkeG6v24gaSB0csOqbiBt4bqjbmcgYSAKCi8vIGzhuqV5IHThu5VuZyB0cm9uZyDEkW/huqFuIFtMLCBSXSA9IHN1bVtSXSAtIHN1bVtMIC0gMV0gLy8gTygxKQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbygwKTsgCgljaW4udGllKDApOyAKCWludCBUOyBjaW4gPj4gVDsgCgoJc2lldmUoKTsgLy8gTyhObG9nTikKCgl3aGlsZSAoVC0tKSB7CgkJaW50IHgsIHk7IAoJCWNpbiA+PiB4ID4+IHk7IAoJCWxsIGNudF9kaXYgPSBjbnRbeV0gLSBjbnRbeCAtIDFdOyAvLyBPKDEpCgkJbGwgc3VtX2RpdiA9IHN1bVt5XSAtIHN1bVt4IC0gMV07IC8vIE8oMSkKCgkJY291dCA8PCBjbnRfZGl2IDw8ICcgJyA8PCBzdW1fZGl2IDw8ICdcbic7IAoJfSAvLyBPKFQpCgoJLy8gTyhObG9nTiArIE4gKyBUKQp9Cg==