Problem: You are given two positive integers n (1 ≤ n ≤ 10^9) and k (1 ≤ k ≤ 100). Represent the number n as the sum of k positive integers of the same parity (have the same remainder when divided by 2).

In other words, find a_1, a_2, …, a_k such that all a_i>0, n = a_1 + a_2 + … + a_k and either all a_i are even or all a_i are odd at the same time.

If such a representation does not exist, then report it.

Input

The first line contains an integer t (1 ≤ t ≤ 1000) — the number of test cases in the input. Next, t test cases are given, one per line.

Each test case is two positive integers n (1 ≤ n ≤ 10^9) and k (1 ≤ k ≤ 100).

Output

For each test case print:

  * YES and the required values a_i, if the answer exists (if there are several answers, print any of them); 
  * NO if the answer does not exist. 



The letters in the words YES and NO can be printed in any case.

Example

Input


8
10 3
100 4
8 7
97 2
8 8
3 10
5 3
1000000000 9


Output


YES
4 2 4
YES
55 5 5 35
NO
NO
YES
1 1 1 1 1 1 1 1
NO
YES
3 1 1
YES
111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111120

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
void __print(int x) { cout << x; }
void __print(long x) { cout << x; }
void __print(long long x) { cout << x; }
void __print(unsigned x) { cout << x; }
void __print(unsigned long x) { cout << x; }
void __print(unsigned long long x) { cout << x; }
void __print(float x) { cout << x; }
void __print(double x) { cout << x; }
void __print(long double x) { cout << x; }
void __print(char x) { cout << '\'' << x << '\''; }
void __print(const char *x) { cout << '\"' << x << '\"'; }
void __print(const string &x) { cout << '\"' << x << '\"'; }
void __print(bool x) { cout << (x ? "true" : "false"); }
template <typename T, typename V>
void __print(const pair<T, V> &x);
template <typename T>
void __print(const vector<T> &x);
template <typename T, typename V>
void __print(const pair<T, V> &x) {
  cout << '{';
  __print(x.first);
  cout << ',';
  __print(x.second);
  cout << "}";
}
template <typename T>
void __print(const vector<T> &x) {
  cout << "{";
  for (int u69 = 0; u69 < x.size(); u69++) {
    __print(x[u69]);
    cout << (u69 + 1 == x.size() ? "" : ",");
  };
  cout << "}";
}
template <typename T>
void __print(const T &x) {
  int f = 0;
  cout << '{';
  for (auto &i : x) cout << (f++ ? "," : ""), __print(i);
  cout << "}";
}
void _print() { cout << "]\n"; }
template <typename T, typename... V>
void _print(T t, V... v) {
  __print(t);
  if (sizeof...(v)) cout << ", ";
  _print(v...);
}
const int mod = 1000000007;
const double eps = 1e-14;
void YES(bool t = 1) {
  const string YESNO[2] = {"NO", "YES"};
  cout << YESNO[t] << endl;
}
void Yes(bool t = 1) {
  const string YesNo[2] = {"No", "Yes"};
  cout << YesNo[t] << endl;
}
void yes(bool t = 1) {
  const string yesno[2] = {"no", "yes"};
  cout << yesno[t] << endl;
}
struct custom_hash {
  static uint64_t splitmix64(uint64_t x) {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
  }
  size_t operator()(uint64_t x) const {
    static const uint64_t FIXED_RANDOM =
        chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
  }
};
long long mpow(int b, int e, int modu = 0, int mod = 1000000007) {
  long long result = 1, base = b, exp = e;
  if (modu) base %= mod;
  while (exp > 0) {
    if (exp & 1) {
      result = ((long long)result * base);
      if (modu) result %= mod;
    }
    base = ((long long)base * base);
    if (modu) base %= mod;
    exp >>= 1;
  }
  return result;
}
inline bool isPowerOfTwo(long long x) { return x && (!(x & (x - 1))); }
bool isPerfectSquare(long long x) {
  long long sr = sqrt(x);
  return ((sr * sr) == x);
}
bool isIn(string &s2, string &s1) {
  if (s1.find(s2) != string::npos) return true;
  return false;
}
bool isSorted(vector<int> &arr) {
  for (int i = 0; i < (int)arr.size() - 1; i++)
    if (arr[i] > arr[i + 1]) return false;
  return true;
}
bool isOdd(int n) { return n & 1; }
bool isEven(int n) { return !(n & 1); }
int TEST_CASES = 1;
void submain() {
  int n, k;
  cin >> n >> k;
  if ((isOdd(n) and isEven(k)) or k > n) {
    cout << "NO\n";
    return;
  }
  if (isOdd(n) or n == k) {
    cout << "YES\n";
    for (int i = 0; i < k - 1; i++) {
      cout << 1 << ' ';
    }
    cout << n - (k - 1) << '\n';
  } else {
    if (k > n / 2) {
      if (isOdd(n - (k - 1))) {
        cout << "YES\n";
        for (int i = 0; i < k - 1; i++) {
          cout << 1 << ' ';
        }
        cout << n - (k - 1) << '\n';
        return;
      }
      cout << "NO\n";
    } else {
      cout << "YES\n";
      for (int i = 0; i < k - 1; i++) {
        cout << 2 << ' ';
      }
      cout << n - (k - 1) * 2 << '\n';
    }
  }
}
int main() {
  { ios_base::sync_with_stdio(false); }
  {
    cin.tie(NULL);
    cout.tie(NULL);
  }
  int t = 1;
  if (TEST_CASES) {
    cin >> t;
  }
  while (t--) {
    submain();
  }
  return 0;
}