# your code goes here
import sys
import math
 
def simple_sieve(limit):
    is_prime = [True] * (limit + 1)
    is_prime[0:2] = [False, False]
    for i in range(2, int(limit**0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, limit + 1, i):
                is_prime[j] = False
    return [i for i, prime in enumerate(is_prime) if prime]
 
def segmented_sieve(m, n, base_primes):
    is_prime = [True] * (n - m + 1)
 
    for p in base_primes:
        start = max(p * p, ((m + p - 1) // p) * p)  # first multiple of p in range [m, n]
        for j in range(start, n + 1, p):
            is_prime[j - m] = False
 
    # Special case: if m == 1, mark 1 as not prime
    if m == 1:
        is_prime[0] = False
 
    return [i + m for i, prime in enumerate(is_prime) if prime]
 
def main():
    t = int(sys.stdin.readline())
    ranges = [tuple(map(int, sys.stdin.readline().split())) for _ in range(t)]
 
    # We only need primes up to sqrt(10^9) = 31622
    base_primes = simple_sieve(31623)
 
    for idx, (m, n) in enumerate(ranges):
        primes_in_range = segmented_sieve(m, n, base_primes)
        print("\n".join(map(str, primes_in_range)))
        if idx != t - 1:
            print()  # blank line between test cases
 
if __name__ == "__main__":
    main()
 
				IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmltcG9ydCBzeXMKaW1wb3J0IG1hdGgKCmRlZiBzaW1wbGVfc2lldmUobGltaXQpOgogICAgaXNfcHJpbWUgPSBbVHJ1ZV0gKiAobGltaXQgKyAxKQogICAgaXNfcHJpbWVbMDoyXSA9IFtGYWxzZSwgRmFsc2VdCiAgICBmb3IgaSBpbiByYW5nZSgyLCBpbnQobGltaXQqKjAuNSkgKyAxKToKICAgICAgICBpZiBpc19wcmltZVtpXToKICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSppLCBsaW1pdCArIDEsIGkpOgogICAgICAgICAgICAgICAgaXNfcHJpbWVbal0gPSBGYWxzZQogICAgcmV0dXJuIFtpIGZvciBpLCBwcmltZSBpbiBlbnVtZXJhdGUoaXNfcHJpbWUpIGlmIHByaW1lXQoKZGVmIHNlZ21lbnRlZF9zaWV2ZShtLCBuLCBiYXNlX3ByaW1lcyk6CiAgICBpc19wcmltZSA9IFtUcnVlXSAqIChuIC0gbSArIDEpCgogICAgZm9yIHAgaW4gYmFzZV9wcmltZXM6CiAgICAgICAgc3RhcnQgPSBtYXgocCAqIHAsICgobSArIHAgLSAxKSAvLyBwKSAqIHApICAjIGZpcnN0IG11bHRpcGxlIG9mIHAgaW4gcmFuZ2UgW20sIG5dCiAgICAgICAgZm9yIGogaW4gcmFuZ2Uoc3RhcnQsIG4gKyAxLCBwKToKICAgICAgICAgICAgaXNfcHJpbWVbaiAtIG1dID0gRmFsc2UKCiAgICAjIFNwZWNpYWwgY2FzZTogaWYgbSA9PSAxLCBtYXJrIDEgYXMgbm90IHByaW1lCiAgICBpZiBtID09IDE6CiAgICAgICAgaXNfcHJpbWVbMF0gPSBGYWxzZQoKICAgIHJldHVybiBbaSArIG0gZm9yIGksIHByaW1lIGluIGVudW1lcmF0ZShpc19wcmltZSkgaWYgcHJpbWVdCgpkZWYgbWFpbigpOgogICAgdCA9IGludChzeXMuc3RkaW4ucmVhZGxpbmUoKSkKICAgIHJhbmdlcyA9IFt0dXBsZShtYXAoaW50LCBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zcGxpdCgpKSkgZm9yIF8gaW4gcmFuZ2UodCldCgogICAgIyBXZSBvbmx5IG5lZWQgcHJpbWVzIHVwIHRvIHNxcnQoMTBeOSkgPSAzMTYyMgogICAgYmFzZV9wcmltZXMgPSBzaW1wbGVfc2lldmUoMzE2MjMpCgogICAgZm9yIGlkeCwgKG0sIG4pIGluIGVudW1lcmF0ZShyYW5nZXMpOgogICAgICAgIHByaW1lc19pbl9yYW5nZSA9IHNlZ21lbnRlZF9zaWV2ZShtLCBuLCBiYXNlX3ByaW1lcykKICAgICAgICBwcmludCgiXG4iLmpvaW4obWFwKHN0ciwgcHJpbWVzX2luX3JhbmdlKSkpCiAgICAgICAgaWYgaWR4ICE9IHQgLSAxOgogICAgICAgICAgICBwcmludCgpICAjIGJsYW5rIGxpbmUgYmV0d2VlbiB0ZXN0IGNhc2VzCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCg==