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;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long n, k;
  cin >> n >> k;
  if (n < k) {
    cout << "NO" << '\n';
  } else {
    long long ans = 0;
    vector<long long> v;
    if (n & 1) {
      v.push_back(1);
      n -= 1;
      ans += 1;
    }
    while (n > 0) {
      long long k = 2;
      while (n >= k) {
        k *= 2;
      }
      k /= 2;
      n -= k;
      v.push_back(k);
      ans += 1;
    }
    if (ans > k) {
      cout << "NO" << '\n';
    } else if (ans == k) {
      cout << "YES" << '\n';
      sort(v.begin(), v.end());
      for (int i = 0; i < v.size(); i++) {
        cout << v[i] << ' ';
      }
      cout << '\n';
    } else {
      sort(v.begin(), v.end());
      long long t = k - ans;
      for (int i = 0; i < v.size(); i++) {
        if (t == 0) break;
        if (v[i] == 1) continue;
        if (v[i] - 1 < t) {
          for (int j = 0; j < v[i] - 1; j++) {
            v.push_back(1);
          }
          t -= (v[i] - 1);
          v[i] = 1;
        } else {
          queue<long long> q;
          q.push(v[i]);
          while (1) {
            long long x = q.front();
            q.pop();
            q.push(x / 2);
            q.push(x / 2);
            t -= 1;
            if (t <= 0) break;
          }
          while (q.size() > 1) {
            v.push_back(q.front());
            q.pop();
          }
          if (!q.empty()) v[i] = q.front();
          ans = k;
          break;
        }
      }
      if (t != 0) {
        cout << "NO" << '\n';
        return 0;
      }
      sort(v.begin(), v.end());
      cout << "YES" << '\n';
      for (int i = 0; i < v.size(); i++) {
        cout << v[i] << ' ';
      }
      cout << '\n';
    }
  }
}