#include <bits/stdc++.h>
using namespace std;
inline long long int gcd(long long int a, long long int b) {
  a = abs(a);
  b = abs(b);
  while (b) {
    a = a % b;
    swap(a, b);
  }
  return a;
}
inline long long int power(long long int a, long long int p) {
  long long int res = 1, x = a;
  while (p) {
    if (p & 1) {
      res = (res * x);
    }
    x = (x * x);
    p >>= 1;
  }
  return res;
}
inline long long int mulmod(long long int a, long long int p, long long int m) {
  long long int res = 0, x = a % m;
  while (p) {
    if (p & 1) {
      res = (res + x) % m;
    }
    x = (x << 1) % m;
    p >>= 1;
  }
  return res;
}
inline long long int bigmod(long long int a, long long int p, long long int m) {
  long long int res = 1 % m, x = a % m;
  while (p) {
    if (p & 1) {
      res = (res * x) % m;
    }
    x = (x * x) % m;
    p >>= 1;
  }
  return res;
}
vector<int> ans;
int n, k;
bool check() {
  if (k == 1) {
    ans.push_back(n);
    return true;
  }
  int sqrtN = sqrt(n);
  for (int i = 2; i <= sqrtN; i++) {
    if (n % i == 0) {
      while (n % i == 0) {
        ans.push_back(i);
        n /= i;
        if (ans.size() == k - 1) {
          if (n > 1) {
            ans.push_back(n);
            return true;
          } else {
            return false;
          }
        }
      }
    }
  }
  if (n > 1 && ans.size() == k - 1) {
    ans.push_back(n);
    return true;
  }
  return false;
}
int main() {
  cin >> n >> k;
  if (check()) {
    for (int i = 0; i < ans.size(); i++) {
      cout << ans[i] << " ";
    }
  } else {
    cout << -1 << endl;
  }
  return 0;
}
