#include <bits/stdc++.h>
using namespace std;
int n, cnt[100055], outdeg[100055], par[100055];
vector<int> lvl[100055];
long long lim[100055];
long long s;
int solve() {
  int lo = 0, hi = n - 1;
  while (lo < hi - 1) {
    int mid = (lo + hi) / 2;
    long long minVal = 0;
    long long count = 1, rem = n;
    for (int i = 1; i <= n; i++) {
      minVal += min(rem, count) * i;
      if (rem - count <= 0) {
        rem = 0;
        break;
      }
      rem -= count;
      count *= mid;
    }
    if (minVal <= s)
      hi = mid;
    else
      lo = mid;
  }
  long long sum = 1;
  lim[1] = 1;
  for (int i = 2; i <= n; i++) {
    lim[i] = lim[i - 1] * hi;
    sum += lim[i];
    if (sum > n) {
      break;
    }
  }
  return hi;
}
int main() {
  scanf("%d%lld", &n, &s);
  long long sum = 0;
  for (int i = 1; i <= n; i++) sum += i;
  if (sum < s) {
    printf("No\n");
    return 0;
  }
  if (s < n + n - 1) {
    printf("No\n");
    return 0;
  }
  int coeff = solve();
  int nxt = 2, ptr = n;
  for (int i = 1; i <= n; i++) {
    cnt[i] = 1;
  }
  while (sum > s) {
    while (cnt[ptr] == 0) {
      ptr--;
    }
    while (cnt[nxt] == lim[nxt]) {
      nxt++;
    }
    if (sum - ptr + nxt >= s) {
      sum += nxt - ptr;
      cnt[ptr]--;
      cnt[nxt]++;
    } else {
      sum -= ptr;
      cnt[ptr]--;
      cnt[s - sum]++;
    }
  }
  printf("Yes\n");
  lvl[1].push_back(1);
  int cur = 2;
  for (int i = 2; i <= n; i++) {
    if (cnt[i] == 0) {
      break;
    }
    int ptr = 0;
    for (int j = 0; j < cnt[i]; j++) {
      lvl[i].push_back(cur);
      if (outdeg[lvl[i - 1][ptr]] == coeff) ptr++;
      par[cur] = lvl[i - 1][ptr];
      outdeg[lvl[i - 1][ptr]]++;
      cur++;
    }
  }
  for (int i = 2; i <= n; i++) printf("%d%c", par[i], (i == n) ? '\n' : ' ');
  return 0;
}
