// 六 数学基础 | 2 质数
// #10197. 「一本通 6.2 例 1」Prime Distance
// Prime Distance
#include <bits/stdc++.h>
#define int long long int
using namespace std;
const int SMAX = (1 << 16) + 9;
bitset<(int)1e6+9> mk;
bitset<SMAX> bmk;
vector<int> prime;
void xxs() {
for(int i = 2; i <= SMAX - 3; i ++) {
if(!bmk[i]) prime.push_back(i);
for(int p : prime) {
if(i * p > SMAX - 3) break;
bmk[i * p] = 1;
if(i % p == 0) break;
}
}
}
signed main() {
xxs();
int l, r;
while(scanf("%lld%lld", &l, &r) == 2) {
mk = 0;
if(l == 1) mk[0] = 1;
for(int p : prime)
for(int i = max((l + p - 1) / p, 2ll); i <= r / p; i ++)
mk[1ll * i * p - l] = 1;
int beg = -1, now, cj;
for(int i = 0; i <= r - l; i ++) if(!mk[i]) {beg = i; break; }
if(beg == -1) {printf("There are no adjacent primes.\n"); continue; }
int c1, c2, c = INT_MAX;
int d1, d2, d = INT_MIN;
for(int i = beg + 1; i <= r - l; i ++) if(!mk[i]) {
now = i;
cj = now - beg;
if(cj < c) {c1 = beg; c2 = now; c = cj; }
if(cj > d) {d1 = beg; d2 = now; d = cj; }
beg = now;
}
c == INT_MAX ?
printf("There are no adjacent primes.\n") :
printf("%lld,%lld are closest, %lld,%lld are most distant.\n",
c1 + l, c2 + l, d1 + l, d2 + l);
}
return 0;
}