#include <bits/stdc++.h>
using namespace std;
inline long long qpow(long long a, long long b, long long mod) {
  long long tot = 1;
  while (b) {
    if (b & 1) tot = (tot * a) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return tot;
}
inline bool is_prime(long long x) {
  if (x < 2) return 0;
  for (long long i = 2; i * i <= x; i++)
    if (x % i == 0) return 0;
  return 1;
}
inline bool is_root(long long a, long long p) {
  if (a % p == 0) return 0;
  for (long long i = 1; i * i < p; i++)
    if ((p - 1) % i == 0) {
      if (i < p - 1 && qpow(a, i, p) == 1) return 0;
      if ((p - 1) / i < p - 1 && qpow(a, (p - 1) / i, p) == 1) return 0;
    }
  return 1;
}
int main() {
  long long n, x;
  scanf("%lld%lld", &n, &x);
  if (!is_prime(n + 1)) return puts("-1") & 0;
  for (long long b = x - 1; b > 1; b--)
    if (is_root(b, n + 1)) return printf("%lld", b) & 0;
  return puts("-1") & 0;
}
