from collections import defaultdict as ddict # sqrt(10^9) < 40000未満の素数をあらかじめ列挙しておく (4203個) prime = [] memo = [True] * 40000 i = 2 while i < 40000: if memo[i]: prime.append(i) j = 2 * i while j < 40000: memo[j] = False j += i i += 1 # print(len(prime)) ########################### N, K = map(int, input().split()) a = list(map(int, input().split())) exponents = ddict(list) for ax in a: # 素因数分解(作成済みの素数表primeを使う) cnt = ddict(int) for p in prime: while ax % p == 0: ax //= p cnt[p] += 1 # sqrt(10^9) 以下の素数で割り切れなかったら、a_iは素数 if ax != 1: cnt[ax] += 1 for key, value in cnt.items(): exponents[key].append(value) # print(exponents) mod = 10**9 + 7 ans = 1 for prime, li in exponents.items(): li.sort(reverse = True) num = 0 for i in range(min(K, len(li))): num += li[i] ans *= pow(prime, num, mod) ans %= mod print(ans)