unsigned primes[3500]; ll nprimes; ll factors(unsigned v,unsigned*a){ ll n=0; rep[primes](p,nprimes){ if(v%p==0){ a[n++]=p; do v/=p;while(v%p==0); } } if(v!=1){ a[n++]=v; } return n; } struct S{ unsigned p,q,l,n,f[32],e[32]; S(){ rd(p,q); //n=Factor(q-=p,f); n=factors(q-=p,f); l=0; } void step(){ p+=l; rep[f](x,n){ while(p%x==0&&q%x==0){ p/=x; q/=x; } } l=1<<30; rep[f](x,n){ if(q%x==0){ l=0){ v.step(); } } } }