#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 7;
int pr[maxn], sz;
bool not_pr[maxn];
struct node {
  int f, cc;
  node(){};
  node(int f, int cc) : f(f), cc(cc){};
};
vector<node> fac;
vector<int> seq;
int main() {
  for (int i = 0; i < maxn; ++i) not_pr[i] = 0;
  not_pr[0] = not_pr[1] = 1;
  for (int i = 2; i < maxn; ++i) {
    if (!not_pr[i]) pr[sz++] = i;
    for (int j = 0; j < sz && pr[j] * i < maxn; ++j) {
      not_pr[pr[j] * i] = 1;
      if (i % pr[j] == 0) break;
    }
  }
  int n, k;
  scanf("%d%d", &n, &k);
  int sum = 0, t = 0;
  for (int i = 0; i < sz; ++i) {
    if (n % pr[i]) continue;
    for (n /= pr[i], t = 1; n % pr[i] == 0; n /= pr[i], t++)
      ;
    fac.push_back(node(pr[i], t));
    sum += t;
  }
  if (n && n != 1) {
    fac.push_back(node(n, 1));
    sum++;
  }
  int p = 0, ans = 1;
  for (int i = 0; i < fac.size(); ++i) {
    int f = fac[i].f, cc = fac[i].cc;
    for (int j = 0; j < cc; ++j) seq.push_back(f);
  }
  if (seq.size() < k) return 0 * printf("-1\n");
  for (int i = 0; i < seq.size(); ++i) {
    if (++p > k - 1) {
      ans *= seq[i];
      continue;
    }
    printf("%d", seq[i]);
    if (i != seq.size() - 1) printf(" ");
  }
  printf("%d\n", ans);
  return 0;
}
