#include<iostream>
#include<vector>
#include<cmath>
using namespace std;
int main()
{
int a,b,n,i,j,times,lnp,n1;
n= 31625;
vector<char> prime(n+1,'P');
prime.at(0) = 'N';
prime.at(1) = 'N';
//Creating list of Primes till n prior to the input scan
for(i=2;i<=n;i=i+1)
{
for(j=i+i;j<=n;j=j+i)
{
prime.at(j) = 'N';
}
}
cin >> times ;
while(times)
{
cin >> a;
cin >> b;
if (a>b)
{
times--;
if (times == 0)
continue;
cout << "\n" ;
continue;
}
if ( a <= n && b <= n)
{
for(i=a;i<=b;i++)
{
if (prime.at(i) == 'P')
cout << i << "\n" ;
}
times--;
if (times == 0)
continue;
cout << "\n" ;
continue;
}
//Finding primes in between the given numbers
vector<char> checklist((b-a)+1,'P');
n1 = sqrt(b);
for(i=2;i<=n1;i++)
{
if (prime.at(i) == 'P' )
{
lnp = (a/i)*i;
if (lnp == 0 )
lnp = i;
else if(lnp == i)
lnp = lnp + i;
else if(lnp<a)
lnp = lnp + i;
for(j=lnp;j<=b;j=j+i)
{
checklist.at(j-a) = 'N';
}
}
}
for(i=0;i<checklist.size();i++)
{
if(checklist.at(i) == 'P' )
cout << i+a << "\n" ;
}
times--;
if (times == 0)
continue;
cout << "\n" ;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKQp7CglpbnQgYSxiLG4saSxqLHRpbWVzLGxucCxuMTsKCW49IDMxNjI1OwoKCXZlY3RvcjxjaGFyPiBwcmltZShuKzEsJ1AnKTsKCglwcmltZS5hdCgwKSA9ICdOJzsKCXByaW1lLmF0KDEpID0gJ04nOwoKCS8vQ3JlYXRpbmcgbGlzdCBvZiBQcmltZXMgdGlsbCBuIHByaW9yIHRvIHRoZSBpbnB1dCBzY2FuCglmb3IoaT0yO2k8PW47aT1pKzEpCgl7CgkJZm9yKGo9aStpO2o8PW47aj1qK2kpCgkJewoJCQlwcmltZS5hdChqKSA9ICdOJzsKCQl9Cgl9CgljaW4gPj4gdGltZXMgOwoJd2hpbGUodGltZXMpCgl7CgkJY2luID4+IGE7CgkJY2luID4+IGI7CgoJCWlmIChhPmIpCgkJewoJCQl0aW1lcy0tOwoJCQlpZiAodGltZXMgPT0gMCkKCQkJCWNvbnRpbnVlOwoJCQljb3V0IDw8ICJcbiIgOwoJICAgICAgICAgICBjb250aW51ZTsKCSAgICB9CgkgICAgaWYgKCBhIDw9IG4gJiYgYiA8PSBuKQoJICAgIHsKCSAgICAJZm9yKGk9YTtpPD1iO2krKykKCSAgICAJewoJICAgIAkJaWYgKHByaW1lLmF0KGkpID09ICdQJykKCSAgICAJCQljb3V0IDw8IGkgPDwgIlxuIiA7CgkgICAgCX0KCSAgICAJdGltZXMtLTsKCQkgICAgaWYgKHRpbWVzID09IDApCgkJICAgIAljb250aW51ZTsKCQkgICAgY291dCA8PCAiXG4iIDsKCQkgICAgY29udGludWU7CgkgICAgfQoKCQkvL0ZpbmRpbmcgcHJpbWVzIGluIGJldHdlZW4gdGhlIGdpdmVuIG51bWJlcnMKCQl2ZWN0b3I8Y2hhcj4gY2hlY2tsaXN0KChiLWEpKzEsJ1AnKTsKCQluMSA9IHNxcnQoYik7CgoJCWZvcihpPTI7aTw9bjE7aSsrKQoJCXsKCQkJaWYgKHByaW1lLmF0KGkpID09ICdQJyApCgkJCXsKCQkJCWxucCA9IChhL2kpKmk7CgkJCQlpZiAobG5wID09IDAgKQoJCQkJCWxucCA9IGk7CgkJCQllbHNlIGlmKGxucCA9PSBpKQoJCQkJCWxucCA9IGxucCArIGk7CgkJCQllbHNlIGlmKGxucDxhKQoJCQkJCWxucCA9IGxucCArIGk7CgkJCQlmb3Ioaj1sbnA7ajw9YjtqPWoraSkKCQkJCXsKCQkJCQljaGVja2xpc3QuYXQoai1hKSA9ICdOJzsKCQkJCX0KCQkJfQoJCX0KCQlmb3IoaT0wO2k8Y2hlY2tsaXN0LnNpemUoKTtpKyspCgkJewoJCQlpZihjaGVja2xpc3QuYXQoaSkgPT0gJ1AnICkKCQkJCWNvdXQgPDwgaSthIDw8ICJcbiIgOwoJCX0KCgkJdGltZXMtLTsKCQlpZiAodGltZXMgPT0gMCkKCQkJY29udGludWU7CgkJY291dCA8PCAiXG4iIDsKCX0KCXJldHVybiAwOwp9Cg==