#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  int ch = getchar(), f = 1;
  while (!isdigit(ch) && (ch != '-') && (ch != EOF)) ch = getchar();
  if (ch == '-') {
    f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int N = 1e5 + 10;
int n, l, r, mid, k, cnt[N];
long long S, tot;
inline long long L(int x) {
  long long lim = x, sum = 1, Log = 2, ret = 1;
  while (sum + lim < n) sum += lim, ret += Log * lim, Log++, lim *= x;
  return ret + Log * (n - sum);
}
inline long long power(long long a, int b) {
  long long ret = 1;
  for (; b; b >>= 1, a = a * a)
    if (b & 1) ret = ret * a;
  return ret;
}
int Cnt, fa[N], dep[N];
inline void dfs(int u) {
  dep[u] = dep[fa[u]] + 1, cnt[dep[u]]--;
  for (register int i = (1); i <= (k); i++)
    if (cnt[dep[u] + 1] > 0)
      fa[++Cnt] = u, dfs(Cnt);
    else
      break;
}
int main() {
  n = read(), S = read();
  if (S < 2 * n - 1 || S > 1ll * n * (n + 1) / 2) return puts("No"), 0;
  l = 1, r = n;
  while (l <= r) {
    mid = l + r >> 1;
    if (L(mid) <= S)
      k = mid, r = mid - 1;
    else
      l = mid + 1;
  }
  if (k == 1 && S != 1ll * (n + 1) * n / 2) return puts("No"), 0;
  long long s = 1ll * (n + 1) * n / 2;
  r = n, l = 2, tot = k - 1;
  for (register int i = (1); i <= (n); i++) cnt[i] = 1;
  while (s - (r - l) > S) {
    s -= r - l, cnt[r]--, cnt[l]++;
    if (cnt[r] == 0) r--;
    if (--tot == 0) l++, tot = power(k, l - 1) - 1;
  }
  int x = s - S;
  cnt[r]--, cnt[r - x]++;
  Cnt = 1, dfs(1);
  puts("Yes");
  for (register int i = (2); i <= (n); i++) printf("%d ", fa[i]);
}
