Problem: A positive integer x is called a power of two if it can be represented as x = 2^y, where y is a non-negative integer. So, the powers of two are 1, 2, 4, 8, 16, ....

You are given two positive integers n and k. Your task is to represent n as the sum of exactly k powers of two.

Input

The only line of the input contains two integers n and k (1 ≤ n ≤ 10^9, 1 ≤ k ≤ 2 ⋅ 10^5).

Output

If it is impossible to represent n as the sum of k powers of two, print NO.

Otherwise, print YES, and then print k positive integers b_1, b_2, ..., b_k such that each of b_i is a power of two, and ∑ _{i = 1}^{k} b_i = n. If there are multiple answers, you may print any of them.

Examples

Input


9 4


Output


YES
1 2 2 4 


Input


8 1


Output


YES
8 


Input


5 1


Output


NO


Input


3 7


Output


NO

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
const long long inf = 1000000000000000000;
long long mpow(long long a, long long b) {
  a %= mod;
  if (!b) return 1;
  long long temp = mpow(a, b / 2);
  temp = (temp * temp) % mod;
  if (b % 2) return (a * temp) % mod;
  return temp;
}
long long pow_(long long a, long long b) {
  if (!b) return 1;
  long long temp = pow_(a, b / 2);
  temp = (temp * temp);
  if (b % 2) return (a * temp);
  return temp;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
bool isPrime(long long n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (long long i = 5; i * i <= n; i = i + 6)
    if (n % i == 0 || n % (i + 2) == 0) return false;
  return true;
}
bool isPalin(string s) {
  int i = 0, j = s.size() - 1;
  while (i < j) {
    if (s[i++] != s[j--]) {
      return false;
    }
  }
  return true;
}
long long cl(long long a, long long b) {
  if (a % b) return 1 + a / b;
  return a / b;
}
bool isPowerOfTwo(long long n) {
  if (n == 0) return false;
  return (ceil(log2(n)) == floor(log2(n)));
}
long long f[200001];
long long mod_inv(long long n, long long MOD) { return mpow(n, MOD - 2); }
long long nCr(long long n, long long r, long long MOD) {
  return (f[n] * ((mod_inv(f[r], MOD) * mod_inv(f[n - r], MOD)) % MOD)) % MOD;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int t;
  t = 1;
  while (t--) {
    long long int n, m, i, j, a[500002], b[500002];
    long long int cn = 0, flag = 0, num, k, ans = 0, sum = 0;
    string s;
    vector<pair<long long int, long long int> > vp;
    map<long long int, long long int> mapp;
    cin >> n >> k;
    vector<long long int> v(k, 1);
    sum = k;
    for (i = k - 1; i >= 0; i--) {
      while (sum + v[i] <= n) {
        sum += v[i];
        v[i] *= 2;
      }
    }
    if (sum != n)
      cout << "NO\n";
    else {
      cout << "YES\n";
      for (auto x : v) cout << x << " ";
      cout << endl;
    }
  }
  return 0;
}