#include <bits/stdc++.h>
using namespace std;
template <class T>
void debug(T a, T b) {
  for (; a != b; ++a) cerr << *a << ' ';
  cerr << endl;
}
template <class T>
void chmin(T& a, const T& b) {
  if (a > b) a = b;
}
template <class T>
void chmax(T& a, const T& b) {
  if (a < b) a = b;
}
namespace std {
template <class S, class T>
ostream& operator<<(ostream& out, const pair<S, T>& a) {
  out << '(' << a.first << ',' << a.second << ')';
  return out;
}
}  // namespace std
long long int x;
long long int k;
int MX = 100000;
long long int res[100005];
int cnt;
vector<long long int> divs;
long long int prime[30];
int cnt2;
void push(long long int a) {
  res[cnt++] = a;
  if (cnt >= MX) {
    for (int i = 0; i < (cnt); ++i) cout << res[i] << ' ';
    cout << endl;
    exit(0);
  }
}
void dfs(long long int x, long long int k) {
  if (k == 0) {
    push(x);
    return;
  }
  if (x == 1) {
    push(x);
    return;
  }
  if (binary_search(prime, prime + cnt2, x)) {
    for (int i = 0; i < k; ++i) push(1);
    push(x);
    return;
  }
  for (int i = 0; i < (divs.size()); ++i)
    if (x % divs[i] == 0) {
      dfs(divs[i], k - 1);
    }
}
int main() {
  cin >> x >> k;
  if (x == 1) {
    puts("1");
    return 0;
  }
  for (long long int i = 2; i * i <= x; ++i)
    if (x % i == 0) {
      divs.push_back(i);
      if (i * i != x) divs.push_back(x / i);
    }
  divs.push_back(x);
  divs.push_back(1);
  sort((divs).begin(), (divs).end());
  for (int i = 0; i < (divs.size()); ++i) {
    int flag = 0;
    for (int j = (1); j < (divs.size()); ++j)
      if (i != j && divs[i] % divs[j] == 0) flag = 1;
    if (!flag) prime[cnt2++] = divs[i];
  }
  dfs(x, k);
  for (int i = 0; i < (cnt); ++i) cout << res[i] << ' ';
  cout << endl;
  return 0;
}
