package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() { solveE(os.Stdin, os.Stdout) }
func solveE(_r io.Reader, _w io.Writer) {
in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
defer out.Flush()
n, k := readTwoNums(in)
a := readNNums(in, n)
const M int = 1e6 + 5
cnt, cntFact := [M]int{}, [M]int{}
for _, v := range a {
cnt[v]++
}
facts := [M][]int{}
for i := 1; i < M; i++ {
for j := i; j < M; j += i {
cntFact[i] += cnt[j]
facts[j] = append(facts[j], i)
}
}
for _, v := range a {
res := 1
for _, f := range facts[v] {
if cntFact[f] >= k {
res = f
}
}
fmt.Fprintln(out, res)
}
}
func solveD(_r io.Reader, _w io.Writer) {
in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
defer out.Flush()
readNum(in)
s := readString(in)
idx1 := []int{}
for i, ch := range s {
if ch == '1' {
idx1 = append(idx1, i)
}
}
m := len(idx1)
idx2 := make([]int, m)
idx2[m/2] = idx1[m/2]
for i := m/2 - 1; i >= 0; i-- {
idx2[i] = idx2[i+1] - 1
}
for i := m/2 + 1; i < m; i++ {
idx2[i] = idx2[i-1] + 1
}
ans := 0
for i := 0; i < m; i++ {
ans += abs(idx1[i] - idx2[i])
}
fmt.Fprintln(out, ans)
}
func solveC(_r io.Reader, _w io.Writer) {
in, out := bufio.NewReader(_r), bufio.NewWriter(_w)
defer out.Flush()
_, m := readTwoNums(in)
type pair struct{ x, y int }
mp := map[pair]struct{}{}
ans := 0
for i := 0; i < m; i++ {
u, v := readTwoNums(in)
u, v = min(u, v), max(u, v)
if _, ok := mp[pair{u, v}]; ok || u == v {
ans++
} else {
mp[pair{u, v}] = struct{}{}
}
}
fmt.Fprintln(out, ans)
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
func max(a, b int) int {
if a >= b {
return a
}
return b
}
func min(a, b int) int {
if a <= b {
return a
}
return b
}
func readString(reader *bufio.Reader) string {
s, _ := reader.ReadString('\n')
for i := 0; i < len(s); i++ {
if s[i] == '\n' || s[i] == '\r' {
return s[:i]
}
}
return s
}
func readInt(bytes []byte, from int, val *int) int {
i := from
sign := 1
if bytes[i] == '-' {
sign = -1
i++
}
tmp := 0
for i < len(bytes) && bytes[i] >= '0' && bytes[i] <= '9' {
tmp = tmp*10 + int(bytes[i]-'0')
i++
}
*val = tmp * sign
return i
}
func readNum(reader *bufio.Reader) (a int) {
bs, _ := reader.ReadBytes('\n')
readInt(bs, 0, &a)
return
}
func readTwoNums(reader *bufio.Reader) (a int, b int) {
res := readNNums(reader, 2)
a, b = res[0], res[1]
return
}
func readThreeNums(reader *bufio.Reader) (a int, b int, c int) {
res := readNNums(reader, 3)
a, b, c = res[0], res[1], res[2]
return
}
func readNNums(reader *bufio.Reader, n int) []int {
res := make([]int, n)
x := 0
bs, _ := reader.ReadBytes('\n')
for i := 0; i < n; i++ {
for x < len(bs) && (bs[x] < '0' || bs[x] > '9') && bs[x] != '-' {
x++
}
x = readInt(bs, x, &res[i])
}
return res
}