#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1000000;
long long v[maxn],prime[maxn];
bool ans[1000000+10];
long long ans2[1000000+10];
int main(){
int l,r;
while(scanf("%d%d",&l,&r)!=EOF){
memset(ans,0,sizeof(ans));
memset(ans2,0,sizeof(ans2));
memset(prime,0,sizeof(prime));
memset(v,0,sizeof(v));
int n;
n=sqrt(r)+100;
int top=0;
for (int i=2;i<=n;i++){
if(v[i]==0){
prime[++top]=i;
v[i]=i;
}
for (int j=1;j<=top;j++){
if(prime[j]>v[i]||prime[j]>n/i) break;
v[i*prime[j]]=prime[j];
}
}
for (int i=1;i<=top;i++){
for (int j=ceil(double(l)/double(prime[i]))>1?ceil(double(l)/double(prime[i])):2;j*prime[i]<=r;j++){
ans[prime[i]*j-l]=1;
}
}
int m=0;
for (int i=0;i<=r-l;i++){
if(!ans[i]) {
ans2[++m]=i;
}
}
if(m<=1) {
printf("There are no adjacent primes.\n");
continue;
}
long long maxl,maxr,maxans=0;
long long minl,minr,minans=10000000;
for (int i=1;i<m;i++){
if(ans2[i+1]-ans2[i]>=maxans){
maxl=ans2[i];
maxr=ans2[i+1];
maxans=ans2[i+1]-ans2[i];
}
if(ans2[i+1]-ans2[i]<=minans){
minl=ans2[i];
minr=ans2[i+1];
minans=ans2[i+1]-ans2[i];
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minl+l,minr+l,maxl+l,maxr+l);
}
return 0;
}