#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=sqrt(2e9)+10;
int p[maxn];
void getprime()
{
for(int i=2;i<maxn;i++)
{
if(!p[i])p[++p[0]]=i;
for(int j=1;j<=p[0]&&p[j]<=maxn/i;j++)
{
p[p[j]*i]=1;
if(i%p[j]==0) break;
}
}
}
vector<int> getfactor(LL x)
{
vector<int>q;
for(int i=1,t;i*i<=x;i++)
if((t=x/i)*i==x){
q.push_back(i);
q.push_back(t);
}
return q;
}
const int maxm=800;
vector<LL>mp[maxm];
int linker[maxm];bool used[maxm];int un;
bool dfs(int u)
{
for(int i=0,sz=mp[u].size();i<sz;i++)
{
int v=mp[u][i];
if(!used[v]){
used[v]=true;
if(linker[v]==-1||dfs(linker[v])){
linker[v]=u;
return true;
}
}
}
return false;
}
int hungry()
{
int res=0;
memset(linker,-1,sizeof linker);
for(int u=0;u<un;u++)
{
memset(used,false,sizeof used);
if(dfs(u)) res++;
}
return res;
}
int tot=0;
unordered_map<int,int>idx;
inline int fnd(int x)
{
if(idx.find(x)==idx.end()) idx[x]=tot++;
return idx[x];
}
void addedge(int uu,int vv)
{
int u=fnd(uu),v=fnd(vv);
mp[u].push_back(v);
mp[v].push_back(u);
}
int solve(LL l,LL r)
{
tot=0;
idx.clear();
for(int i=l;i<=r;i++)
{
fnd(i);
}
un=r-l+1;
for(int i=l;i<=r;i++)
{
vector<int> q=getfactor(i);
// printf("%d :",i);
for(auto &j:q){
if(j>un)continue;
addedge(i,j);
// printf("%d ",j);
}
// printf("\n");
}
int res=hungry();
for(int i=0;i<tot;i++)
mp[i].clear();
// printf("%d %d\n",res,un);
return res!=un;
}
int main() {
#ifdef shuaishuai
freopen("in.txt","r",stdin);
#endif // shuaishuai
int t;
scanf("%d",&t);
// getprime();
for(int cas=1;cas<=t;cas++)
{
LL n,s;
scanf("%lld%lld",&n,&s);
LL l=max(n+1,s+1),r=n+s;
int f=0;
if(r-l+1>=777){
f=1;
printf("Case #%d: %s\n",cas,f? "No":"Yes");
continue;
}
f=solve(l,r);
printf("Case #%d: %s\n",cas,f? "No":"Yes");
}
return 0;
}