#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static long GCD(long x, long y) => y == 0 ? x : GCD(y, x % y); var n = I(); var p = I(); var ans = n % 2 != 0 || (n + 1) % p == 0 || GCD(n + 1, p - 1) != 1; Console.WriteLine(ans ? "Yes" : "No"); // bool IsPrime(int p) // { // for (var i = 2; i * i <= p; i++) if (p % i == 0) return false; // return true; // } // for (var n = 0; n <= 30; n += 2) for (var p = 2; p <= 30; p++) // { // if (!IsPrime(p)) continue; // var f = false; // for (var k = 0; k < 300; k++) // { // var s = 0; // var last = 1; // for (var i = 0; i <= n; i++) // { // s = (s + last) % p; // last = last * k % p; // } // if (s == 0) f = true; // } // // if (!f) Console.WriteLine(n + " " + p + " " + ((n + 1) % (p - 1)) + " " + (p - 1)); // var ans = n % 2 != 0 || (n + 1) % p == 0 || GCD(n + 1, p - 1) != 1; // if (ans != f) Console.WriteLine(n + " " + p); // }