#include<bits/stdc++.h>
using namespace std;
const int maxn=1e8,Maxn=4.7e4;
int ans[maxn],b[maxn];
bool vis[maxn];
int cnt,m,t1,t2,x1,x2,y,y2,l,r;
inline void Prime(){
for(int i=2;i<=Maxn;++i){
if(!vis[i])
ans[++cnt]=i;
for(int j=1;i*ans[j]<=Maxn;j++){
vis[i*ans[j]]=1;
if(!(i%ans[j]))
break;
}
}
}
int main(){
Prime();
while(~scanf("%d",&l)){
l=max(2,l);
scanf("%d",&r);
memset(vis,1,sizeof(vis));
for(int i=1;i<=cnt;i++)
for(int j=max(2,(l+ans[i]-1)/ans[i]);j<=r/ans[i];j++)
vis[ans[i]*j-l]=0;
m=0;
for(int i=l;i<=r;i++)
if(vis[i-l])
b[++m]=i;
t1=2147483647,t2=0;
for(int i=1,k;i<m;i++){
k=b[i+1]-b[i];
if(k<t1){
t1=k;
x1=b[i];
y=b[i+1];
}
if(k>t2){
t2=k;
x2=b[i];
y2=b[i+1];
}
}
if(!t2)
puts("There are no adjacent primes.");
else
printf("%d,%d are closest, %d,%d are most distant.\n",x1,y,x2,y2);
}
return 0;
}