#include <bits/stdc++.h>
using namespace std;
struct _ {
  _() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
  }
} _;
template <class A, class B>
ostream &operator<<(ostream &o, pair<A, B> t) {
  o << "(" << t.first << ", " << t.second << ")";
  return o;
}
template <class T>
T convert(const string &s) {
  if (is_integral<T>()) {
    char *p;
    return strtoll(s.c_str(), &p, 10);
  } else {
    T first = 0;
    stringstream(s) >> first;
    return first;
  }
}
template <class T>
void PV(T a, T b, int n = 0, string s = " ") {
  int c = 0;
  while (a != b) {
    cout << *a++;
    if (a != b && (!n || ++c % n))
      cout << s;
    else
      cout << "\n";
  }
}
template <class T>
inline bool chmin(T &a, T b) {
  return a > b ? a = b, 1 : 0;
}
template <class T>
inline bool chmax(T &a, T b) {
  return a < b ? a = b, 1 : 0;
}
const long long linf = 0x3f3f3f3f3f3f3f3fLL;
const int inf = 0x3f3f3f3f;
const int mod = int(1e9) + 7;
const int N = 100010;
long long X, K;
vector<pair<long long, int> > factorize(long long n) {
  vector<pair<long long, int> > R;
  for (long long i = 2; i * i <= n; i++) {
    int c = 0;
    while (n % i == 0) n /= i, c++;
    if (c > 0) R.push_back(make_pair(i, c));
  }
  if (n > 1) R.push_back(make_pair(n, 1));
  return R;
}
vector<long long> allFactor(long long n) {
  auto R = factorize(n);
  vector<long long> factor;
  long long first = 1;
  vector<int> c(R.size(), 0);
  while (1) {
    factor.push_back(first);
    int carry = 1;
    for (int i = 0; i < R.size(); i++) {
      c[i] += carry, first *= R[i].first;
      if (c[i] > R[i].second) {
        carry = 1;
        while (c[i] > 0) {
          c[i]--;
          first /= R[i].first;
        }
      } else {
        carry = 0;
        break;
      }
    }
    if (carry > 0) break;
  }
  sort((factor).begin(), (factor).end());
  return factor;
}
vector<long long> factor;
vector<long long> primes;
void f(long long first, int cnt, vector<long long> &ans) {
  if (ans.size() > 1e5) return;
  if (cnt == 0) {
    ans.push_back(first);
    return;
  }
  if (first == 1) {
    ans.push_back(1);
    return;
  }
  if (binary_search((primes).begin(), (primes).end(), first)) {
    for (int i = 0; i < cnt; i++) ans.push_back(1);
    ans.push_back(first);
    return;
  }
  for (long long second : factor) {
    if (first % second == 0) f(second, cnt - 1, ans);
    if (second >= first) break;
  }
}
int main() {
  cin >> X >> K;
  if (X == 1) {
    cout << 1 << endl;
    return 0;
  }
  if (K == 0) {
    cout << X << endl;
    return 0;
  }
  if (K > 100000) {
    vector<long long> v(100000, 1);
    PV((v).begin(), (v).end());
    return 0;
  }
  for (auto i : factorize(X))
    if (i.second == 1) primes.push_back(i.first);
  factor = allFactor(X);
  vector<long long> ans;
  f(X, K, ans);
  if (ans.size() > 1e5) ans.resize(100000);
  PV((ans).begin(), (ans).end());
  return 0;
}
