#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll MOD = 1000000007; const int MAX_N = 100010; int spf[MAX_N]; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } void init_table(int N) { memset(spf, 0, sizeof(spf)); spf[1] = 1; for (int i = 2; i <= N; ++i) { if (spf[i] != 0) continue; for (int j = i; j <= N; j+= i) { spf[j] = i; } } } int factor_count(int n) { int cnt = 0; while (n > 1) { int f = spf[n]; n /= f; cnt++; } return cnt; } int divisor_count(int n) { map counter; while (n > 1) { int f = spf[n]; counter[f]++; n /= f; } int cnt = 1; for (auto it : counter) { cnt *= it.second + 1; } return cnt; } int main() { int N, K; cin >> N >> K; init_table(N); int max_dc = 0; int ans = 0; for (int i = 1; i < N; ++i) { int g = gcd(i, N); int fc = factor_count(g); // fprintf(stderr, "i: %d, g: %d, fc: %d\n", i, g, fc); if (fc < K) continue; int dc = divisor_count(i); if (max_dc < dc) { max_dc = dc; ans = i; } } cout << ans << endl; return 0; }