#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5, MAXM = 10000;
long long x, k;
int number = 1;
map<long long, int> mp;
vector<long long> answer;
vector<long long> divisors[MAXM];
int encode(long long x) {
  if (mp.count(x) == false) {
    mp[x] = number;
    number++;
    return number - 1;
  }
  return mp[x];
}
bool checkPrime(long long x) {
  for (long long d = 2; d * d <= x; d++) {
    if (x % d == 0) {
      return false;
    }
  }
  return true;
}
void addDivisors(long long x, vector<long long> &v) {
  for (long long d = 1; d * d <= x; d++) {
    if (x % d == 0) {
      v.push_back(d);
      if (x / d != d) {
        v.push_back(x / d);
      }
    }
  }
  sort(v.begin(), v.end());
}
void dfs(long long number, long long level) {
  if (answer.size() >= MAXN) return;
  if (level == k) {
    answer.push_back(number);
    return;
  }
  int p = encode(number);
  for (int i = 0; i < divisors[p].size(); i++) {
    if (divisors[p][i] == 1) {
      answer.push_back(1);
      continue;
    }
    if (checkPrime(divisors[p][i]) == false) {
      dfs(divisors[p][i], level + 1);
    } else {
      for (int j = 0; j < k - level - 1; j++) {
        answer.push_back(1);
      }
      answer.push_back(divisors[p][i]);
    }
    if (answer.size() >= MAXN) break;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> x >> k;
  if (x == 1) {
    cout << "1" << '\n';
    return 0;
  }
  if (k >= MAXN) {
    for (int i = 0; i < MAXN; i++) {
      cout << "1 ";
    }
    cout << '\n';
    return 0;
  }
  if (checkPrime(x) == true) {
    for (int i = 0; i < k; i++) {
      cout << "1 ";
    }
    cout << x << '\n';
    return 0;
  }
  addDivisors(x, divisors[encode(x)]);
  for (int i = 0; i < divisors[encode(x)].size() - 1; i++) {
    long long u = divisors[encode(x)][i];
    addDivisors(u, divisors[encode(u)]);
  }
  dfs(x, 0);
  for (int i = 0; i < min((int)answer.size(), (int)MAXN); i++) {
    cout << answer[i] << " ";
  }
}
