import io, os, sys
import numpy
def primesfrom3to(n):
""" Returns a array of primes, 3 <= p < n """
sieve = numpy.ones(n//2, dtype=bool)
for i in range(3,int(n**0.5)+1,2):
if sieve[i//2]:
sieve[i*i//2::i] = False
return 2*numpy.nonzero(sieve)[0][1::]+1
input=(io.BytesIO(os.read(0, os.fstat(0).st_size)).readline)
nt=int(input())
nux=0
nin=[]
notp=set()
notp={'0','2','4','5','6','8'}
#Z wyjatkien 2 i 5, liczby na pewno nie-pierwsze koncza sie na 0,2,4,5,6,8
for it in range(nt):
nl, nu = [int(s) for s in input().split()]
if(nl>5):
while str(nl)[-1] in notp:
nl+=1
while str(nu)[-1] in notp:
nu-=1
nin.append([nl,nu])
if nu>nl: #ignorujemy przypadki typu 2147483644 do 2147483646
if nu>nux: nux=nu
# generujemy liste raz bo i tak jest zawsze od 2 do n
primes=primesfrom3to(nux)
for it in range(nt):
nl,nu = nin[it]
if nu>nl:
pir=numpy.where((primes>=nl) & (primes <=nu))
# wyniki w primes[pir]
for j in primes[pir]:
sys.stdout.write(str(j)+'\n')
aW1wb3J0IGlvLCBvcywgc3lzCmltcG9ydCBudW1weQoKZGVmIHByaW1lc2Zyb20zdG8obik6CiAgICAiIiIgUmV0dXJucyBhIGFycmF5IG9mIHByaW1lcywgMyA8PSBwIDwgbiAiIiIKICAgIHNpZXZlID0gbnVtcHkub25lcyhuLy8yLCBkdHlwZT1ib29sKQogICAgZm9yIGkgaW4gcmFuZ2UoMyxpbnQobioqMC41KSsxLDIpOgogICAgICAgIGlmIHNpZXZlW2kvLzJdOgogICAgICAgICAgICBzaWV2ZVtpKmkvLzI6OmldID0gRmFsc2UKICAgIHJldHVybiAyKm51bXB5Lm5vbnplcm8oc2lldmUpWzBdWzE6Ol0rMQoKaW5wdXQ9KGlvLkJ5dGVzSU8ob3MucmVhZCgwLCBvcy5mc3RhdCgwKS5zdF9zaXplKSkucmVhZGxpbmUpCm50PWludChpbnB1dCgpKQpudXg9MApuaW49W10Kbm90cD1zZXQoKQpub3RwPXsnMCcsJzInLCc0JywnNScsJzYnLCc4J30KI1ogd3lqYXRraWVuIDIgaSA1LCBsaWN6YnkgbmEgcGV3bm8gbmllLXBpZXJ3c3plIGtvbmN6YSBzaWUgbmEgMCwyLDQsNSw2LDgKCmZvciBpdCBpbiByYW5nZShudCk6CiAgICBubCwgbnUgPSBbaW50KHMpIGZvciBzIGluIGlucHV0KCkuc3BsaXQoKV0KICAgIGlmKG5sPjUpOgogICAgICAgIHdoaWxlIHN0cihubClbLTFdIGluIG5vdHA6CiAgICAgICAgICAgIG5sKz0xCiAgICAgICAgd2hpbGUgc3RyKG51KVstMV0gaW4gbm90cDoKICAgICAgICAgICAgbnUtPTEKICAgIG5pbi5hcHBlbmQoW25sLG51XSkKICAgIGlmIG51Pm5sOiAgICAgI2lnbm9ydWplbXkgcHJ6eXBhZGtpIHR5cHUgMjE0NzQ4MzY0NCBkbyAyMTQ3NDgzNjQ2CiAgICAgICAgaWYgbnU+bnV4OiBudXg9bnUKIAojIGdlbmVydWplbXkgbGlzdGUgcmF6IGJvIGkgdGFrIGplc3QgemF3c3plIG9kIDIgZG8gbgpwcmltZXM9cHJpbWVzZnJvbTN0byhudXgpCgpmb3IgaXQgaW4gcmFuZ2UobnQpOgogICAgbmwsbnUgPSBuaW5baXRdCiAgICBpZiBudT5ubDoKICAgICAgICBwaXI9bnVtcHkud2hlcmUoKHByaW1lcz49bmwpICYgKHByaW1lcyA8PW51KSkKICAgICAgICAjIHd5bmlraSB3IHByaW1lc1twaXJdCiAgICAgICAgZm9yIGogaW4gcHJpbWVzW3Bpcl06CiAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKGopKydcbicp