#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 10;
int fa[N], nowd[N], now_cnt[N];
long long s, n;
vector<int> V[N];
bool check(int mid) {
  for (int i = 2; i <= n; i++) nowd[i] = mid - 1;
  long long now_siz = (n + 1ll) * n / 2;
  int now = 2;
  for (int i = n; i >= 3; i--) {
    long long x = now_siz - s;
    if (x == 0) break;
    if (now >= i) return false;
    if (x >= i - now) {
      now_siz -= i - now;
      nowd[now]--;
      nowd[now + 1] += mid;
      if (nowd[now] == 0) now++;
    } else {
      nowd[i - x]--;
      nowd[i - x + 1] += mid;
      return true;
    }
  }
  return true;
}
int main() {
  cin >> n >> s;
  if (s < 2 * n - 1 || s > (n + 1ll) * n / 2) {
    puts("No");
    return 0;
  }
  if (s == (n + 1ll) * n / 2) {
    puts("Yes");
    for (int i = 1; i <= n - 1; i++) printf("%d%c", i, i == n - 1 ? '\n' : ' ');
    return 0;
  }
  int l = 2, r = n, ans = -1;
  while (l <= r) {
    int mid = l + r >> 1;
    if (check(mid)) {
      ans = mid;
      r = mid - 1;
    } else
      l = mid + 1;
  }
  for (int i = 1; i <= n; i++) V[i].push_back(i);
  for (int i = 2; i <= n; i++) nowd[i] = ans - 1;
  long long now_siz = (n + 1ll) * n / 2;
  int now = 2;
  for (int i = n; i >= 3; i--) {
    long long x = now_siz - s;
    if (x == 0) break;
    V[i].pop_back();
    if (x >= i - now) {
      now_siz -= i - now;
      nowd[now]--;
      nowd[now + 1] += ans;
      V[now].push_back(i);
      if (nowd[now] == 0) now++;
    } else {
      now_siz -= x;
      nowd[i - x]--;
      V[i - x].push_back(i);
      nowd[i - x + 1] += ans;
    }
  }
  for (int i = 2; i <= n; i++) {
    int siz = V[i].size();
    for (int j = 0; j < siz; j++) {
      int id = V[i][j];
      fa[id] = V[i - 1][j / ans];
    }
  }
  puts("Yes");
  for (int i = 2; i <= n; i++) printf("%d%c", fa[i], i == n ? '\n' : ' ');
  return 0;
}
