#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
using namespace std;
long long pp;
long long pow1(long long p,long long a)
{
if(p==0)
return 1;
long long x=pow1(p/2,a);
long long ans =x*x%pp;
if(p%2==1)
ans=ans*a%pp;
return ans;
}
int main()
{
bool has=false;
long long p,a,b;
while(cin>>p>>a)
{
has=true ;
if(p==0&&a==0)
break;
for(int i=2;i*i<p;i++)
{
if(p%i==0)
{
has=false;
break;
}
}
if(has==false )
{
pp=p;
b=pow1(p,a);
if(a==b)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
else
{
printf("no\n");
}
}
return 0;
}
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <queue>
#include <stack>
using namespace std;
long long pp;
long long pow1(long long p,long long a)
{
if(p==0)
return 1;
long long x=pow1(p/2,a);
long long ans =x*x%pp;
if(p%2==1)
ans=ans*a%pp;
return ans;
}
int main()
{
bool has=false;
long long p,a,b;
while(cin>>p>>a)
{
has=true ;
if(p==0&&a==0)
break;
for(int i=2;i*i<p;i++)
{
if(p%i==0)
{
has=false;
break;
}
}
if(has==false )
{
pp=p;
b=pow1(p,a);
if(a==b)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
else
{
printf("no\n");
}
}
return 0;
}