![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h>
#include<math.h>
int prim(int p)
{
int t=(int)sqrt(1.0*p);
int i;
for(i=2;i<=t;i++)
{
if(p%i==0)
return 0;
}
return 1;
}
int mon(int x,int exp,int p)
{
if(exp==0)
return 1;
__int64 ret=mon(x,exp>>1,p);
ret=(ret*ret)%p;
if(exp&1)
{
ret =(ret*x)%p;
}
return (int)ret;
}
int main()
{
int p,a;
while(scanf("%d%d",&p,&a),p||a)
{
if(prim(p)==0&&mon(a,p,p)==a)
{
printf("yes\n");
}
else
printf("no\n");
}
}