#include <bits/stdc++.h>
long long int const MOD = 1000000007;
long long int const N = 1000005;
long long int const LN = 20;
long long int const inf = 8e18;
using namespace std;
long long int n, m, a[N];
vector<long long int> vv[N];
long long int second;
long long int cnt[N];
long long int fn(long long int v) {
  cnt[1] = 1;
  long long int pre = 1;
  for (long long int i = 2;; i++) {
    cnt[i] = v * cnt[i - 1];
    if (cnt[i] + pre >= n) {
      cnt[i] = n - pre;
      cnt[i + 1] = 0;
      break;
    } else
      pre += cnt[i];
  }
  long long int sm = 0;
  for (long long int i = 1; cnt[i]; i++) sm += i * cnt[i];
  return sm;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> second;
  if (second > (n * (n + 1)) / 2) {
    cout << "No\n";
    return 0;
  }
  if (second < 2 * n - 1) {
    cout << "No\n";
    return 0;
  }
  long long int lo = 1;
  long long int hi = n;
  long long int ans = 0;
  while (lo <= hi) {
    long long int mid = (lo + hi) / 2;
    if (fn(mid) <= second) {
      ans = mid;
      hi = mid - 1;
    } else
      lo = mid + 1;
  }
  for (long long int i = 0; i < N; i++) cnt[i] = 0;
  long long int ok = fn(ans);
  long long int mx = 0;
  for (mx = 1; cnt[mx]; mx++)
    ;
  long long int delp = mx - 1;
  long long int addp = mx;
  while (ok < second) {
    if (cnt[delp] == 1) {
      delp--;
      continue;
    }
    if (delp + second - ok <= addp) {
      cnt[delp]--;
      cnt[delp + second - ok]++;
      break;
    } else {
      cnt[delp]--;
      cnt[addp]++;
      ok += addp - delp;
      addp++;
      continue;
    }
  }
  cout << "Yes\n";
  long long int now = 1;
  vv[1].push_back(1);
  for (long long int i = 2; cnt[i]; i++) {
    long long int st = now + 1;
    long long int en = now + cnt[i];
    now += cnt[i];
    for (long long int j = st; j <= en; j++) vv[i].push_back(j);
    for (long long int j = 0; j < (long long int)vv[i].size(); j++)
      cout << vv[i - 1][j / ans] << " ";
  }
  return 0;
}
