#include <bits/stdc++.h>
using namespace std;
const long long maxn = 5e5 + 222;
vector<long long> savedep;
long long savecnt[maxn];
long long arr = 1;
inline long long find() {
  while (savecnt[arr] == 0) arr++;
  return arr;
}
long long n, s;
vector<long long> ans[maxn];
long long fa[maxn];
void out(long long k) {
  long long nowid = 1;
  for (long long i = 0; i < savedep.size(); i++) {
    while (savedep[i]--) ans[i].push_back(nowid++);
    for (long long j = 0; i != 0 && j < ans[i].size(); j++) {
      fa[ans[i][j]] = ans[i - 1][j / k];
    }
  }
  puts("YES");
  for (long long i = 2; i <= n; i++) printf("%lld ", fa[i]);
}
void solve() {
  scanf("%lld %lld", &n, &s);
  long long l = 1;
  long long r = n - 1;
  long long res = -1;
  while (l <= r) {
    long long mid = l + r;
    mid >>= 1;
    savedep.clear();
    long long le = n;
    long long now = 1;
    long long nowval = 0;
    while (le) {
      now = min(now, le);
      savedep.push_back(now);
      nowval += savedep.size() * now;
      le -= now;
      now *= mid;
    }
    if (nowval == s && mid == 1) {
      out(1);
      return;
    }
    if (nowval > s) {
      res = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  if (res == n - 1 || res == -1) {
    puts("NO");
    return;
  }
  savedep.clear();
  long long le = n;
  long long nowval = 0;
  long long now = 1;
  while (le) {
    now = min(now, le);
    savedep.push_back(now);
    nowval += savedep.size() * now;
    le -= now;
    now *= res;
  }
  res++;
  long long nowmx = res;
  for (long long i = 1; i < savedep.size() - 1; i++) {
    savecnt[i] = nowmx - savedep[i];
    nowmx = savedep[i] * res;
  }
  long long cha = nowval - s;
  while (cha) {
    while (savedep.back() == 0) savedep.pop_back();
    long long nowdep = savedep.size() - 1;
    long long destdep = nowdep - cha;
    destdep = max(destdep, find());
    cha -= nowdep - destdep;
    savedep.back()--;
    savedep[destdep]++;
    savecnt[destdep + 1] += res;
    savecnt[destdep]--;
  }
  out(res);
}
signed main() { solve(); }
