import sys import pypyjit import itertools import heapq import math from collections import deque, defaultdict import bisect input = sys.stdin.readline sys.setrecursionlimit(10 ** 6) pypyjit.set_param('max_unroll_recursion=-1') def index_lt(a, x): 'return largest index s.t. A[i] < x or -1 if it does not exist' return bisect.bisect_left(a, x) - 1 def index_le(a, x): 'return largest index s.t. A[i] <= x or -1 if it does not exist' return bisect.bisect_right(a, x) - 1 def index_gt(a, x): 'return smallest index s.t. A[i] > x or len(a) if it does not exist' return bisect.bisect_right(a, x) def index_ge(a, x): 'return smallest index s.t. A[i] >= x or len(a) if it does not exist' return bisect.bisect_left(a, x) class Osa_k: # N以下の整数を素因数分解 O(NlogN) def __init__(self, N): self.min_factor = [i for i in range(N + 1)] for i in range(2, N + 1): if i * i > N: break if self.min_factor[i] == i: for j in range(2, N + 1): if i * j > N: break if self.min_factor[i * j] > i: self.min_factor[i * j] = i def factors(self, n): d = defaultdict(int) while n > 1: d[self.min_factor[n]] += 1 n //= self.min_factor[n] return d N, K = map(int, input().split()) osa_k = Osa_k(N) fn = osa_k.factors(N) ma_divs = 0 for i in range(1, N): fi = osa_k.factors(i) cnt = 0 for k in fn.keys(): cnt += min(fn[k], fi[k]) if cnt < K: continue n_divs = 1 for v in fi.values(): n_divs *= (v + 1) if n_divs > ma_divs: ma_divs = n_divs ans = i print(ans)