#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N=1000005;
typedef long long LL;
int primes[N], n, cnt=0;
bool vis[N];
int l, r;
void Lseive(int n){ // 线性筛
memset(primes, 0x00, sizeof primes);
memset(vis, 0x00, sizeof vis);
for(int i=2; i<=n; ++i){
if(!vis[i]) primes[cnt++]=i;
for(int j=0; primes[j]<=n/i; ++j){
vis[primes[j]*i]=true;
if(i%primes[j]==0) break;
}
}
}
int main(){
Lseive(50000);
while(cin>>l>>r){
memset(vis, 0x00, sizeof vis);
for(int i=0; i<cnt; ++i){
LL p=primes[i];
for(LL j=max(2*p, (l+p-1)/p*p); j<=r; j+=p) vis[j-l]=true;
}
int knt=0;
int sub[r-l+1];
memset(sub, 0x00, sizeof sub);
for(int i=0; i<=r-l; ++i){
if(!vis[i] && i+l>1) sub[knt++]=i+l;
}
if(knt<2) cout<<"There are no adjacent primes."<<endl;
else{
int minp=0, maxp=0; // 存储下标
for(int i=0; i+1<knt; ++i){
int d=sub[i+1]-sub[i];
if(d<sub[minp+1]-sub[minp]) minp=i;
if(d>sub[maxp+1]-sub[maxp]) maxp=i;
}
printf("%d,%d are closest, %d,%d are most distant.\n", sub[minp], sub[minp+1], sub[maxp], sub[maxp+1]);
}
}
return 0;
}