#include <bits/stdc++.h>
using namespace std;
template <class T>
int getbit(T x, int pos) {
  return (x >> (pos - 1)) & 1;
}
template <class T>
void turn_on(T &x, int pos) {
  x = x | ((T)1 << (pos - 1));
}
template <class T>
void turn_off(T &x, int pos) {
  x = x & ~((T)1 << (pos - 1));
}
int read_int() {
  char r;
  bool start = false, neg = false;
  int ret = 0;
  while (true) {
    r = getchar();
    if ((r - '0' < 0 || r - '0' > 9) && r != '-' && !start) continue;
    if ((r - '0' < 0 || r - '0' > 9) && r != '-' && start) break;
    if (start) ret *= 10;
    start = true;
    if (r == '-')
      neg = true;
    else
      ret += r - '0';
  }
  if (!neg)
    return ret;
  else
    return -ret;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
const long long oo = 1e18 + 7;
const int MOD = 1e9 + 7;
long long x, k;
vector<long long> res;
vector<long long> a[10007];
map<long long, int> m;
void process(long long n) {
  m[n] = 1;
  int x = 1;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      a[x].push_back(i);
      if (n / i != i) a[x].push_back(n / i);
    }
  }
  sort(a[x].begin(), a[x].end());
  for (int i = 0; i < a[1].size() - 1; i++) {
    x++;
    m[a[1][i]] = x;
    n = a[1][i];
    for (int j = 1; j <= sqrt(n); j++) {
      if (n % j == 0) {
        a[x].push_back(j);
        if (n / j != j) a[x].push_back(n / j);
      }
    }
    sort(a[x].begin(), a[x].end());
  }
}
void solve(long long n, long long k) {
  if (k == 0) return;
  if (res.size() >= 100000) return;
  if (n == 1 || k == 1) {
    res.push_back(n);
    return;
  }
  int x = m[n];
  for (int i = 0; i < a[x].size(); i++) {
    solve(a[x][i], k - 1);
    if (res.size() >= 100000) return;
  }
}
int main() {
  srand(time(NULL));
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> x >> k;
  process(x);
  solve(x, k + 1);
  for (int i = 0; i < min(100000, int(res.size())); i++) cout << res[i] << ' ';
}
