#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a, b, ct;
void seg_sieve(ll myPrimes[])
{
bool isPrime[b+1];
memset(isPrime, 1, sizeof isPrime); //at first all are primes up to b
for(ll i = 2; i*i<=b; i++)
{
if(isPrime[i])
{
for(ll j = i; i*j<=b; j+=i)
isPrime[i*j] = 0;
}
}
ll pre[b+1];
ct = 0;
for(int i = 2; i*i<=b; i++) //store primes up to sqrt(b) for further calculation in segmented sieve
{
if(isPrime[i])
pre[ct++] = i;
}
ll s, p;
// at first all numbers are considered to be prime from a to b.
for(ll i = a; i<=b; i++)
isPrime[i] = 1;
for(ll i = 0; i<ct; i++)
{
p = pre[i];
s = a/p; //divide by 2, 3, 5, 7 up to sqrt(b)
s = s*p; //multiply by 2, 3, 7 and so on up to sqrt(b)
for(ll j = s; j<=b; j+=p)
{
if(j<a)
continue;
isPrime[j] = 0;
}
}
ct = 0;
for(ll i = a; i<=b; i++)
{
if(isPrime[i])
myPrimes[ct++] = i;
}
}
int main()
{
cin>>a>>b;
ll myPrimes[b+1];
seg_sieve(myPrimes);
for(ll i = 0; i<ct; i++)
cout<<myPrimes[i]<<" ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpsbCBhLCBiLCBjdDsKCnZvaWQgc2VnX3NpZXZlKGxsIG15UHJpbWVzW10pCnsKICAgIGJvb2wgaXNQcmltZVtiKzFdOwogICAgbWVtc2V0KGlzUHJpbWUsIDEsIHNpemVvZiBpc1ByaW1lKTsgLy9hdCBmaXJzdCBhbGwgYXJlIHByaW1lcyB1cCB0byBiCiAgICBmb3IobGwgaSA9IDI7IGkqaTw9YjsgaSsrKQogICAgewogICAgICAgIGlmKGlzUHJpbWVbaV0pCiAgICAgICAgewogICAgICAgICAgICBmb3IobGwgaiA9IGk7IGkqajw9Yjsgais9aSkKICAgICAgICAgICAgICAgIGlzUHJpbWVbaSpqXSA9IDA7CiAgICAgICAgfQogICAgfQogICAgbGwgcHJlW2IrMV07CiAgICBjdCA9IDA7CiAgICBmb3IoaW50IGkgPSAyOyBpKmk8PWI7IGkrKykgLy9zdG9yZSBwcmltZXMgdXAgdG8gc3FydChiKSBmb3IgZnVydGhlciBjYWxjdWxhdGlvbiBpbiBzZWdtZW50ZWQgc2lldmUKICAgIHsKICAgICAgICBpZihpc1ByaW1lW2ldKQogICAgICAgICAgICBwcmVbY3QrK10gPSBpOwogICAgfQogICAgbGwgcywgcDsKICAgIC8vIGF0IGZpcnN0IGFsbCBudW1iZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIHByaW1lIGZyb20gYSB0byBiLgogICAgZm9yKGxsIGkgPSBhOyBpPD1iOyBpKyspCiAgICAgICAgaXNQcmltZVtpXSA9IDE7CiAgICBmb3IobGwgaSA9IDA7IGk8Y3Q7IGkrKykKICAgIHsKICAgICAgICBwID0gcHJlW2ldOwogICAgICAgIHMgPSBhL3A7ICAgIC8vZGl2aWRlIGJ5IDIsIDMsIDUsIDcgdXAgdG8gc3FydChiKQogICAgICAgIHMgPSBzKnA7ICAgIC8vbXVsdGlwbHkgYnkgMiwgMywgNyBhbmQgc28gb24gdXAgdG8gc3FydChiKQogICAgICAgIGZvcihsbCBqID0gczsgajw9Yjsgais9cCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGo8YSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpc1ByaW1lW2pdID0gMDsKICAgICAgICB9CiAgICB9CiAgICBjdCA9IDA7CiAgICBmb3IobGwgaSA9IGE7IGk8PWI7IGkrKykKICAgIHsKICAgICAgICBpZihpc1ByaW1lW2ldKQogICAgICAgICAgICBteVByaW1lc1tjdCsrXSA9IGk7CiAgICB9Cn0KCmludCBtYWluKCkKewogICAgY2luPj5hPj5iOwogICAgbGwgbXlQcmltZXNbYisxXTsKICAgIHNlZ19zaWV2ZShteVByaW1lcyk7CiAgICBmb3IobGwgaSA9IDA7IGk8Y3Q7IGkrKykKICAgICAgICBjb3V0PDxteVByaW1lc1tpXTw8IiAiOwogICAgcmV0dXJuIDA7Cn0K