#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<string>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll INFF=1e12;
const int INF=0x7f7f7f7f;
ll l,r;
int cnt;
int prim[50010];
bool vis[1000010];
ll prim2[1000010];
void init()
{
cnt=0;
memset(vis,0,sizeof(vis));
for(int i=2;i<=50000;i++)
{
if(!vis[i])
{
prim[cnt++]=i;
for(ll j=i+i;j<=50000;j+=i)
vis[j]=1;
//printf("%d\n",i);
}
}
}
void init2()
{
ll i,j,b;
memset(vis,0,sizeof(vis));
for(i=0;i<cnt;i++)
{
b=l/prim[i];
while(b*prim[i]<l||b<=1)
b++;
for(j=b*prim[i];j<=r;j+=prim[i])
{
if(j>=l)
vis[j-l]=1;
}
}
if(l==1)
vis[0]=1;
}
void solve()
{
init2();
int cntt=0;
for(int i=0;i<=r-l;i++)
{
if(!vis[i])
{
prim2[cntt++]=i+l;
}
}
ll minn=INFF,maxx=-INFF;
ll maxl,maxr,minl,minr;
if(cntt<=1)
{
printf("There are no adjacent primes.\n");
}
else
{
for(int i=0;i<cntt-1;i++)
{
if(prim2[i+1]-prim2[i]<minn)
{
minn=prim2[i+1]-prim2[i];
minl=prim2[i],minr=prim2[i+1];
}
if(prim2[i+1]-prim2[i]>maxx)
{
maxx=prim2[i+1]-prim2[i];
maxl=prim2[i],maxr=prim2[i+1];
}
}
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",minl,minr,maxl,maxr);
}
}
int main()
{
init();
while(scanf("%lld%lld",&l,&r)!=EOF)
{
solve();
}
return 0;
}