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>
const double PI = acos(-1.0);
using namespace std;
template <typename T1, typename T2>
istream& operator>>(istream& is, pair<T1, T2>& v) {
  is >> v.first >> v.second;
  return is;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& os, pair<T1, T2>& v) {
  os << "{";
  os << v.first << ", " << v.second;
  os << "}";
  return os;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& os, map<T1, T2>& v) {
  os << "[";
  for (pair<T1, T2> a : v) {
    os << a << ' ';
  }
  os << "]" << endl;
  return os;
}
istream& operator>>(istream& is, vector<string>& v) {
  for (int i = 0; i < v.size(); ++i) {
    getline(is, v[i]);
  }
  return is;
}
template <typename T>
istream& operator>>(istream& is, vector<T>& v) {
  for (int i = 0; i < v.size(); ++i) {
    is >> v[i];
  }
  return is;
}
template <typename T>
ostream& operator<<(ostream& os, vector<T>& v) {
  os << "[";
  for (int i = 0; i < v.size(); ++i) {
    os << v[i];
    if (i != v.size() - 1) os << " ";
  }
  os << "]" << endl;
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, deque<T>& v) {
  os << "[";
  for (int i = 0; i < v.size(); ++i) {
    os << v[i];
    if (i != v.size() - 1) os << " ";
  }
  os << "]" << endl;
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, set<T>& v) {
  os << "[";
  int i = 0;
  for (T a : v) {
    os << a;
    if (i != v.size() - 1) os << " ";
    ++i;
  }
  os << "]" << endl;
  return os;
}
template <typename T>
ostream& operator<<(ostream& os, multiset<T>& v) {
  os << "[";
  int i = 0;
  for (T a : v) {
    os << a;
    if (i != v.size() - 1) os << " ";
    ++i;
  }
  os << "]" << endl;
  return os;
}
string hren = "UNDECIDABLE";
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, k;
  cin >> n >> k;
  map<int, int> v;
  int l = 0, r = 0;
  for (int i = 0; i < 32; ++i) {
    if ((1 << i) & n) {
      ++l;
      r += (1 << i);
      ++v[1 << i];
    }
  }
  if (k < l || k > r) {
    cout << "NO" << endl;
    return 0;
  }
  int cur = v.size();
  while (cur < k) {
    auto it = --v.end();
    v[it->first / 2] += it->second * 2;
    cur += it->second;
    v.erase(it);
  }
  auto it = --v.end();
  it->second -= (cur - k) * 2;
  v[it->first * 2] = (cur - k);
  cout << "YES" << endl;
  for (auto a : v) {
    for (int i = 0; i < a.second; ++i) {
      cout << a.first << ' ';
    }
  }
  cout << endl;
  return 0;
}