#include <bits/stdc++.h>
using namespace std;
long long f(long long n, long long c) {
  long long cur = 1, sum = 0, tot = 0;
  for (long long i = 1;; i++) {
    if (sum + cur > n) {
      tot += (n - sum) * i;
      break;
    }
    sum += cur;
    tot += i * cur;
    cur *= c;
  }
  return tot;
}
vector<int> lv[100001];
int cur = 2, clv = 2;
long long g(long long p, long long n, long long c) {
  long long cur = c * p, sum = 0, tot = 0;
  for (long long i = 1;; i++) {
    if (sum + cur > n) {
      tot += (n - sum) * i;
      break;
    }
    sum += cur;
    tot += i * cur;
    cur *= c;
  }
  return tot;
}
void solve(long long n, long long s, long long c) {
  if (n == 0) return;
  for (long long k = 1; k <= lv[clv - 1].size() * c; k++) {
    if (g(k, n - k, c) + n <= s) {
      for (int j = cur; j < cur + k; j++) {
        lv[clv].push_back(j);
      }
      cur += k;
      clv++;
      solve(n - k, s - n, c);
      return;
    }
  }
}
int par[100001], deg[100001];
vector<int> child[100001];
long long sz[100001];
void gg(int u) {
  sz[u]++;
  for (int i = 0; i < child[u].size(); i++) {
    int v = child[u][i];
    gg(v);
    sz[u] += sz[v];
  }
}
int main() {
  long long n, s;
  scanf("%lld %lld", &n, &s);
  if (s < 2 * n - 1 || s > n * (n + 1) / 2) {
    puts("No");
    return 0;
  }
  if (s == 2 * n - 1) {
    puts("Yes");
    for (int i = 2; i <= n; i++) printf("1 ");
    puts("");
    return 0;
  }
  if (s == n * (n + 1) / 2) {
    puts("Yes");
    for (int i = 2; i <= n; i++) printf("%d ", i - 1);
    puts("");
    return 0;
  }
  long long lo = 1, hi = n - 1;
  while (lo + 1 < hi) {
    long long mid = (lo + hi) / 2;
    if (f(n, mid) <= s)
      hi = mid;
    else
      lo = mid;
  }
  lv[1].push_back(1);
  solve(n - 1, s - n, hi);
  for (int i = 1; i <= n; i++) deg[i] = hi;
  for (int i = 2; i < clv; i++) {
    int idx = 0;
    for (int j = 0; j < lv[i].size(); j++) {
      int v = lv[i][j];
      if (deg[lv[i - 1][idx]] == 0) idx++;
      par[v] = lv[i - 1][idx];
      deg[lv[i - 1][idx]]--;
    }
  }
  for (int i = 2; i <= n; i++) {
    child[par[i]].push_back(i);
  }
  puts("Yes");
  for (int i = 2; i <= n; i++) printf("%d ", par[i]);
  puts("");
  return 0;
}
