#include <bits/stdc++.h>
using namespace std;
long long DIV[1 << 20], aux[1 << 20];
int cnt, aux_cnt, idx = 0;
long long out[1 << 20];
int P[1 << 20], prime_cnt;
int not_prime[1 << 20];
int dp_prime[1 << 20];
vector<long long> divs[1 << 20];
void sieve() {
  int mx = 1 << 20;
  for (int i = 2; i < mx; i++)
    if (not_prime[i] == 0) {
      P[prime_cnt++] = i;
      if (i * 1LL * i >= mx) continue;
      for (int j = i * i; j < mx; j += i) not_prime[j] = 1;
    }
}
bool is_prime(long long n) {
  int idx = lower_bound(DIV, DIV + cnt, n) - DIV;
  if (dp_prime[idx] != -1) return dp_prime[idx];
  for (int i = 0; i < (prime_cnt); i++) {
    if (P[i] * 1LL * P[i] > n) break;
    if (n % P[i] == 0) return dp_prime[idx] = 0;
  }
  return dp_prime[idx] = n > 1;
}
void get_DIVs(long long n, long long *DIV, int &cnt) {
  int idx = lower_bound(::DIV, ::DIV + ::cnt, n) - ::DIV;
  if (::cnt && !divs[idx].empty()) {
    copy(divs[idx].begin(), divs[idx].end(), DIV);
    cnt = divs[idx].size();
    return;
  }
  cnt = 0;
  for (long long i = 1; i * i <= n; i++)
    if (n % i == 0) {
      DIV[cnt++] = i;
      if (i * i != n) DIV[cnt++] = n / i;
    }
  sort(DIV, DIV + cnt);
  divs[idx] = vector<long long>(DIV, DIV + cnt);
}
void work(long long n, long long k, int &mx) {
  if (k == 0) {
    if (mx) out[idx++] = n, mx--;
  } else if (n == 1) {
    if (mx) {
      out[idx++] = 1;
      mx--;
    }
  } else if (is_prime(n)) {
    for (int i = 0; i < k && mx; i++, mx--) out[idx++] = 1;
    work(n, 0, mx);
  } else {
    get_DIVs(n, aux, aux_cnt);
    vector<long long> DIVs(aux, aux + aux_cnt);
    for (int i = 0; i < ((int)DIVs.size()) && mx; i++) work(DIVs[i], k - 1, mx);
  }
}
int main() {
  sieve();
  memset(dp_prime, -1, sizeof dp_prime);
  long long n, k;
  cin >> n >> k;
  int mx = 100 * 1000;
  get_DIVs(n, DIV, cnt);
  work(n, k, mx);
  for (int i = 0; i < (idx); i++) printf("%lld%c", out[i], " \n"[i == idx - 1]);
  return 0;
}
