#include <iostream>
#include <cstring>
#include <string>
#include <set>
#include <map>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <unordered_map>
#include <sstream>
#include <fstream>

using namespace std;
vector<vector<int>> pyramid;
int median(int a, int b, int c) {
    int arr[3] = {a, b, c};
    sort(arr, arr+3);
    return arr[1];
}
void print() {
    for (int i = 0; i < pyramid.size(); ++i) {
        for (int j = 0; j < pyramid[i].size(); ++j) {
            printf("%4d", pyramid[i][j]);
        }
        puts("");
    }
}
template <typename extra>
void buildPyramid(vector<int> &permutation, extra onCompletion = NULL) {
    pyramid.resize(1 + permutation.size() >> 1);
    pyramid.front().resize(1);
    for (int i = 1; i < pyramid.size(); ++i) {
        pyramid[i].resize(pyramid[i-1].size() + 2);
    }
    for (int i = 0; i < permutation.size(); ++i) {
        pyramid.back()[i] = permutation[i];
    }
    for (int i = pyramid.size() - 2; i >= 0; --i) {
        for (int j = 0; j < pyramid[i].size(); ++j) {
            pyramid[i][j] = median(pyramid[i+1][j], 
                                   pyramid[i+1][j+1],
                                   pyramid[i+1][j+2]);
            
        }
    }
    onCompletion();
}

template <typename arr> 
bool verify(arr& permutation, int v) {
    pyramid.resize((permutation.size() + 1) / 2);
    for (int i = 0; i < permutation.size(); ++i) {
        pyramid.back().push_back(permutation[i]);
    }
    for (int i = pyramid.size()-2; i >= 0 ; --i) {
        pyramid[i].resize(pyramid[i+1].size() - 2);
        for (int j = 0; j < pyramid[i].size(); ++j) {
            pyramid[i][j] = median(pyramid[i+1][j],
                                   pyramid[i+1][j+1],
                                   pyramid[i+1][j+2]);
        }
    }
    printf("top value: %d\n", pyramid[0][0]);
    return pyramid[0][0] == v;
}


int main() {
    ios_base::sync_with_stdio(0);
#ifdef IDE
    freopen("C:\\file.in", "r", stdin);
    //    freopen("C:\\n.in", "w", stdout);
#endif
    int n; cin >> n;
    int t; cin >> t;
//    vector<int> p(n);
//
//    for (int i = 0; i < n; ++i) {
//        p[i] = i + 1;
//    }
//    do {
//        bool found = false;
//        buildPyramid(p, [=,&found]() {
//            if (pyramid[0][0] == t) {
//                printf("solution: (%d)\n", pyramid[0][0]);
//                print();
//                found = true;
//            }
//        });
//        if (found)
//            break;
//    } while (next_permutation(p.begin(), p.end()));
    
    if (t == 1 || t == 2*n-1) {
        puts("No");
        return 0;
    }
    deque<int> q;
    set<int> numbers;
    n = 2*n - 1;
    for (int i = 1; i <= n; ++i) {
        if (abs(i-t) <= 1)
            continue;
        numbers.insert(i);
    }
    
    q.push_back(t-1);
    q.push_back(t);
    q.push_back(t+1);
    set<int>::iterator it = numbers.begin();
    for (int i = n/2; i > 1; --i) {
        q.push_front(*it);
        it++;
    }
    for (int i = n/2; i > 1 ; --i) {
        q.push_back(*it);
        it++;
    }
    
    puts("Yes");
    for (int v : q) {
        printf("%d\n", v);
    }
    return true & false;
}


Measured memory_bytes: 11776