import java.util.*; public class segmentedsieve { static int MAX =10000001; static ArrayList sieve() { boolean isp[]=new boolean[MAX]; Arrays.fill(isp,true); ArrayList primes=new ArrayList<>(); for(int i=2;i*i primes) { long prod=1; long p=1000000007; int base=0; boolean pr[]=new boolean[r-l+1]; Arrays.fill(pr,true); int currprime=0; for(int i=0;primes.get(i)*(long)primes.get(i)<=r;i++) { currprime=primes.get(i); base=(l/currprime)*currprime; if(base primes; primes=sieve(); for(int j=0;j