#include <iostream>
#include<math.h>
#include<vector>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
bool mark[100001];
//vector<int>prime;
int prime[100001];
int c=0;
void seive()
{
int i,j;
mark[0]=mark[1]=1;
for(i=2;i<=100001;i++)
{
if(mark[i]==0)
{
//prime.push_back(i);
prime[c++]=i; // inserting the prime i in the array
for(j=2*i;j<=100001;j+=i)
mark[j]=1; // marking the multiples of i as 1
}
}
prime[0]=2;
}
int main() {
// your code goes here
int test,j;
cin>>test;
for(j=0;j<100001;j++)
mark[j]=0;
seive();
while(test--)
{
int m,n,i,k=0;
cin>>m>>n;
if(n<=100000)
{
for(i=0;i<c;i++)
{
//cout<<mark[i]<<endl;
//if(!mark[i])
//cout<<i<<endl;
if(prime[i]>=m && prime[i]<=n) cout<<prime[i]<<endl;
// o/p all prime no.s in the range (m,n)
}
cout<<endl;
continue;
}
else
{
if(m<=100000)
{
for(i=0;i<c;i++)
{
if(prime[i]>=m && prime[i]<=n)
cout<<prime[i]<<endl;
}
}
int seg[100001];
for(i=0;i<100001;i++)
seg[i]=0;
for(i=0;i<c;i++)
{
//cout<<"the prime[i] is "<<prime[i]<<endl;
for(j= prime[i] * (m/prime[i]); j<=n; j+=prime[i]) // offset values from each prime no. in the high range
{
if(j>=m)
seg[j-m]=1;
//p++;
}
}
for(i=0;i<100001;i++)
{
if(seg[i]==0)
cout<<m+i<<endl;
}
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZTxtYXRoLmg+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RkbGliLmg+CiNpbmNsdWRlPHN0ZGlvLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIG1hcmtbMTAwMDAxXTsKCi8vdmVjdG9yPGludD5wcmltZTsKaW50IHByaW1lWzEwMDAwMV07CmludCBjPTA7Cgp2b2lkIHNlaXZlKCkKewppbnQgaSxqOwptYXJrWzBdPW1hcmtbMV09MTsKCmZvcihpPTI7aTw9MTAwMDAxO2krKykKewogIGlmKG1hcmtbaV09PTApCiAgewogIC8vcHJpbWUucHVzaF9iYWNrKGkpOwogIHByaW1lW2MrK109aTsgLy8gaW5zZXJ0aW5nIHRoZSBwcmltZSBpIGluIHRoZSBhcnJheQogIGZvcihqPTIqaTtqPD0xMDAwMDE7ais9aSkgIAogIG1hcmtbal09MTsgIC8vIG1hcmtpbmcgdGhlIG11bHRpcGxlcyBvZiBpIGFzIDEKICB9Cn0KcHJpbWVbMF09MjsKfQoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglpbnQgdGVzdCxqOwoJY2luPj50ZXN0OwoJZm9yKGo9MDtqPDEwMDAwMTtqKyspIAoJICBtYXJrW2pdPTA7CglzZWl2ZSgpOwoJd2hpbGUodGVzdC0tKQoJewoJICBpbnQgbSxuLGksaz0wOwoJCgkgIGNpbj4+bT4+bjsKCQoJICBpZihuPD0xMDAwMDApCgkgIHsKICAgICAgICBmb3IoaT0wO2k8YztpKyspCiAgICAgICAgeyAgCiAgICAgICAgICAgLy9jb3V0PDxtYXJrW2ldPDxlbmRsOwogICAgICAgICAgIC8vaWYoIW1hcmtbaV0pCiAgICAgICAgICAgLy9jb3V0PDxpPDxlbmRsOwogICAgICAgICAgIGlmKHByaW1lW2ldPj1tICYmIHByaW1lW2ldPD1uKSBjb3V0PDxwcmltZVtpXTw8ZW5kbDsgIAogICAgICAgICAgIC8vIG8vcCBhbGwgcHJpbWUgbm8ucyBpbiB0aGUgcmFuZ2UgKG0sbikKICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgY291dDw8ZW5kbDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgIGVsc2UgCiAgICAgeyAgIAogICAgICAgaWYobTw9MTAwMDAwKQogICAgICAgewogICAgICAgICBmb3IoaT0wO2k8YztpKyspCiAgICAgICAgIHsKICAgICAgICAgIGlmKHByaW1lW2ldPj1tICYmIHByaW1lW2ldPD1uKQogICAgICAgICAgY291dDw8cHJpbWVbaV08PGVuZGw7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAKICAgICBpbnQgc2VnWzEwMDAwMV07CiAgICAgZm9yKGk9MDtpPDEwMDAwMTtpKyspIAogICAgICAgICBzZWdbaV09MDsKICAgICBmb3IoaT0wO2k8YztpKyspCiAgICAgeyAKICAgICAgIC8vY291dDw8InRoZSBwcmltZVtpXSBpcyAiPDxwcmltZVtpXTw8ZW5kbDsKICAgICAgIGZvcihqPSBwcmltZVtpXSAqIChtL3ByaW1lW2ldKTsgajw9bjsgais9cHJpbWVbaV0pIC8vIG9mZnNldCB2YWx1ZXMgZnJvbSBlYWNoIHByaW1lIG5vLiBpbiB0aGUgaGlnaCByYW5nZQogICAgICAgewogICAgICAgICBpZihqPj1tKQogICAgICAgICAKICAgICAgICAgc2VnW2otbV09MTsKICAgICAgICAgLy9wKys7CiAgICAgICAgIAogICAgICAgfQogICAgfQogICAgCiAgICAgIGZvcihpPTA7aTwxMDAwMDE7aSsrKQogICAgICB7CiAgICAgIGlmKHNlZ1tpXT09MCkKICAgICAgY291dDw8bStpPDxlbmRsOwogICAgICB9CiAgICB9CiAgICBjb3V0PDxlbmRsOwogICAgfQoJcmV0dXJuIDA7Cn0=