#include <bits/stdc++.h>
#define int long long
using namespace std;
int L, R;
int v[50000];
int prime[50000];
int is_prime[100050];
int cnt;
int tot;
int b[100010];
void primes(int n)
{
memset(v, 0, sizeof(v));
for (int i = 2; i <= n; i++)
{
if (v[i] == 0)
v[i] = i, prime[++cnt] = i;
for (int j = 1; j <= cnt; j++)
{
if (prime[j] > v[i] || prime[j] > n / i)
break;
v[i * prime[j]] = prime[j];
}
}
}
signed main()
{
while (scanf("%d%d", &L, &R) != EOF)
{
memset(is_prime, true, sizeof is_prime);
cnt = 0;
tot = 1;
primes(sqrt(R));
for (int i = L; i <= R; i++)
is_prime[i - L] = i;
for (int i = L; i <= R; i++)
{
for (int p = 1; p <= cnt; p++)
{
if (i == prime[p])
continue;
if (i / prime[p] >= (L / prime[p]) && i / prime[p] <= (R / prime[p]) && i % prime[p] == 0)
{
is_prime[i - L] = 0;
tot++;
}
}
}
memset(b, 0, sizeof b);
int res = 0;
for (int i = 0; i <= R - L; i++)
if(is_prime[i] != 0)
b[res++] = is_prime[i];
if (res == 1 || res == 0)
{
cout << "There are no adjacent primes." << endl;
continue;
}
int tag = 0;
int tag2 = 0;
int tag3 = 0;
int tag4 = 0;
int res_min = INT_MAX;
int res_max = 0;
for (int i = 1; i < res; i++)
{
if(b[i] - b[i - 1] > res_max)
{
res_max = b[i] - b[i - 1];
tag = b[i];
tag2 = b[i - 1];
}
if(b[i] - b[i - 1] < res_min)
{
res_min = b[i] - b[i - 1];
tag3 = b[i];
tag4 = b[i - 1];
}
}
cout << tag4 << "," << tag3 << " are cloest. " << tag2 << "," << tag << " are most distant" << endl;
}
return 0;
}