/*Bismillahir Rahmanir Rahim*///{
#include <bits/stdc++.h>
#include <ext/numeric>
using namespace std; using __gnu_cxx::power;
using ll = long long; using ull = unsigned long long; using ld = long double;
const ll llinf = (1ll<<61)-1;
const double eps = 1e-6, ldeps = 1e-9;
struct Dbg {
static constexpr auto &os = cout;   // replace by cerr in interactive.
template<class C> static auto dud(C *x)->decltype(os << *x, 0);
template<class C> static char dud(...);
template<class C> typename enable_if<sizeof dud<C>(0)!=1, Dbg&>::type operator<<(const C &x) { os << x; return *this; }
template<class C> Dbg &dump(C b, C e) {
    *this << "\n[";
    int cur = 0;
    for (C i = b; i!=e and cur<26; i++, cur++) *this << ", "+2*(i==b) << *i;
    return *this << ']';
}
template<class C> typename enable_if<sizeof dud<C>(0)==1, Dbg&>::type operator<<(const C &x) {
    return dump(begin(x), end(x));
}
template<class C, size_t X> typename enable_if<!is_same<C, const char>::value, Dbg&>::type operator <<(C (&x)[X]) {
    return dump(begin(x), end(x));
}
template<class B, class C> Dbg &operator <<(const pair<B, C> &x) {
    return *this << '{' << x.first << ", " << x.second << '}';
}
Dbg &operator<<(ostream&(*x)(std::ostream&)) { os << x; return *this; }
} dbg;
void err(istringstream *iss) { delete iss; }
template<class C, class... Args> void err(istringstream *iss, const C &val, const Args &... args) {
    string name; *iss >> name; if (name.back()==',') name.pop_back();
    dbg << name << " = " << val << "; ", err(iss, args...);
}
#define bug(args...) dbg << __LINE__ << ": ", err(new istringstream(#args), args), dbg << endl
#define cbug(a, args...) if (a) bug(args);
#define ASSERT(a, o, b, args...) if (!((a)o(b))) bug(a, b, ##args), assert((a)o(b));
#define sl(a) int(strlen(a))
#define sz(a) int(a.size())
int T, Q, cn;//}
const int inf = 1000000007, mxn = 100005;

int n, x;

signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.failbit); cout.precision(11);
    cin >> n >> x;
    // for (n = 3; n<=100; n++) {
    //     for (x = 2; x <= 2*n-2; x++) {

    if (x==1 or x==2*n-1) return cout << "No\n", 0;

    vector<int> v(2*n-1);
    // for (auto &i : v) {
    //     cin >> i;
    // }
    v[n-1] = x, v[n] = x-1, v[n-2] = x+1;
    for (int i = 3, l = n-3, r = n+1, tmp = x+1; i < 2*n-1; i++, tmp++) {
        if (i&1) v[l--] = tmp%(2*n-1)+1;
        else v[r++] = tmp%(2*n-1)+1;
    }
    cout << "Yes\n";
    for (auto &i : v) {
        cout << i << '\n';
    }
    // vector<vector<int> > grid(n, vector<int>(2*n-1));
    // for (int j = 0; j < 2*n-1; j++) {
    //     grid[n-1][j] = v[j];
    // }
    // for (int j = n-2, l = 1, r = 2*n-3; j >= 0; j--, l++, r--) {
    //     for (int k = l; k <= r; k++) {
    //         vector<int> tmp(grid[j+1].begin()+(k-1), grid[j+1].begin()+(k+2));
    //         sort(begin(tmp), end(tmp));
    //         grid[j][k] = tmp[1];
    //     }
    // }
    // ASSERT(grid[0][n-1], ==, x)//bug(n, x, grid[0][n-1]);
    // for (auto &i : grid) {
    //     for (auto &j : i) {
    //         cout << setw(2) << j << ' ';
    //     }
    //     cout << '\n';
    // }
    // cout << '\n' << '\n';
    //     }
    // }
}

Measured memory_bytes: 2304