#include <bits/stdc++.h>
using namespace std;
const int MAX = 1000100;
long long X, K;
bitset<MAX> bs;
long long sieve_size;
vector<long long> primes;
void sieve(long long upperbound) {
  sieve_size = upperbound + 1ll;
  bs.set();
  bs[0] = bs[1] = false;
  for (long long i = 2; i < sieve_size; i++)
    if (bs[i]) {
      for (long long j = i * i; j < sieve_size; j += i) bs[j] = false;
      primes.push_back(i);
    }
}
vector<pair<long long, int> > primeFactors(long long N) {
  vector<pair<long long, int> > factors;
  long long PF_idx = 0, PF = primes[PF_idx];
  while (PF * PF <= N) {
    int cnt = 0;
    while (N % PF == 0) {
      N /= PF;
      cnt++;
    }
    if (cnt > 0) factors.push_back(make_pair(PF, cnt));
    PF = primes[++PF_idx];
  }
  if (N != 1) factors.push_back(make_pair(N, 1));
  return factors;
}
vector<pair<long long, int> > f;
vector<long long> d;
vector<vector<pair<long long, int> > > dM;
void dfs(int lvl, long long acc) {
  if (lvl == (int)f.size())
    d.push_back(acc);
  else {
    for (int i = 0; i <= f[lvl].second; i++) {
      dfs(lvl + 1, acc);
      acc *= f[lvl].first;
    }
  }
}
set<long long> sF;
int cnt = 0;
bool solve(int id, long long k) {
  if (k == 0) {
    printf("%lld ", d[id]);
    cnt++;
    if (cnt == 100000)
      return false;
    else
      return true;
  } else {
    if (sF.count(d[id])) {
      for (long long i = 0; i < (long long)(k); i++) {
        printf("1 ");
        cnt++;
        if (cnt == 100000) return false;
      }
      printf("%lld ", d[id]);
      cnt++;
      if (cnt == 100000)
        return false;
      else
        return true;
    } else {
      printf("1 ");
      cnt++;
      if (cnt == 100000) return false;
      for (int i = 1; i < ((int)(dM[id]).size()); i++) {
        if (!solve(dM[id][i].second, k - 1)) return false;
      }
      return true;
    }
  }
  return true;
}
int main() {
  sieve(1000010);
  scanf("%lld %lld", &X, &K);
  f = primeFactors(X);
  for (long long i = 0; i < (long long)(((int)(f).size())); i++)
    sF.insert(f[i].first);
  dfs(0, 1ll);
  sort(d.begin(), d.end());
  dM.resize(d.size());
  for (long long i = 0; i < (long long)(((int)(d).size())); i++)
    for (long long j = 0; j < (long long)(i + 1); j++)
      if (d[i] % d[j] == 0) dM[i].push_back(make_pair(d[j], j));
  solve(d.size() - 1, K);
  printf("\n");
}
