#pragma comment(linker, "/STACK:1024000000")
#define _CRT_SECURE_NO_WARNINGS
//#include "testlib.h"
#include <cstdio>
#include <cassert>
#include <algorithm>
#include <iostream>
#include <memory.h>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <cmath>
#include <bitset>
#include <deque>
#include <ctime>
#include <stack>
#include <queue>
#include <fstream>
#include <sstream>
#include <functional>
/*#ifndef room111
#include <sys/resource.h>
#endif*/
#include <unordered_set>
#include <unordered_map>
using namespace std;
//#define FILENAME ""
#define mp make_pair
#define all(a) a.begin(), a.end()
typedef long long li;
typedef long double ld;
void solve(bool);
void precalc();
clock_t start;
//int timer = 1;

int testNumber = 1;

bool todo = true;

bool stress = false;

int main() {
#ifdef room111
	freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
#else
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	//freopen(FILENAME".in", "r", stdin);
	//freopen(FILENAME ".out", "w", stdout);
#endif
	start = clock();
	int t = 1;
	cout.sync_with_stdio(0);
	cin.tie(0);
	precalc();
	cout.precision(10);
	cout << fixed;
	/*#ifndef room111
	const rlim_t kStackSize = 128L * 1024L * 1024L;   // min stack size = 64 Mb
	struct rlimit rl;
	int result;

	result = getrlimit(RLIMIT_STACK, &rl);
	if (result == 0)
	{
	if (rl.rlim_cur < kStackSize)
	{
	rl.rlim_cur = kStackSize;
	result = setrlimit(RLIMIT_STACK, &rl);
	if (result != 0)
	{
	fprintf(stderr, "setrlimit returned result = %d\n", result);
	}
	}
	}
	#endif*/

	//cin >> t;
	int testNum = 1;
	while (t--) {
		//cerr << testNum << endl;
		//cout << "Case #" << testNum++ << ": ";
		solve(true);
		++testNumber;
		//++timer;
	}
#ifdef room1111
	while (true)
		solve(false);
#endif

#ifdef room111
	cerr << "\n\n" << (clock() - start) / 1.0 / CLOCKS_PER_SEC << "\n\n";
#endif

	return 0;
}

//BE CAREFUL: IS INT REALLY INT?

//#define int li

/*int pr[] = { 97, 2011 };
int mods[] = { 1000000007, 1000000009 };

const int C = 300500;
int powers[2][C];*/

//int MOD = 1000000007;

//int c[5010][5010];

template<typename T>
T binpow(T q, T w, T mod) {
	if (!w)
		return 1 % mod;
	if (w & 1)
		return q * 1LL * binpow(q, w - 1, mod) % mod;
	return binpow(q * 1LL * q % mod, w / 2, mod);
}

/*int curMod = 1000000009;

int fact[100500], revfact[100500];

int getC(int n, int k) {
int res = fact[n] * revfact[n - k] % curMod * revfact[k] % curMod;
return res;
}*/

/*const int C = 7000500;

int least_prime[C];*/

void precalc() {

	/*for (int i = 2; i < C; ++i) {
	if (!least_prime[i]) {
	least_prime[i] = i;
	for (li j = i * 1LL * i; j < C; j += i) {
	least_prime[j] = i;
	}
	}
	}*/

	/*fact[0] = revfact[0] = 1;
	for (int i = 1; i < 100500; ++i) {
	fact[i] = fact[i - 1] * i % curMod;
	revfact[i] = binpow(fact[i], curMod - 2, curMod);
	}*/

	/*for (int w = 0; w < 2; ++w) {
	powers[w][0] = 1;
	for (int j = 1; j < C; ++j) {
	powers[w][j] = (powers[w][j - 1] * 1LL * pr[w]) % mods[w];
	}
	}*/
	/*for (int i = 0; i < 5010; ++i) {
	c[i][i] = c[i][0] = 1;
	for (int j = 1; j < i; ++j) {
	c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % MOD;
	}
	}*/
}

template<typename T>
T gcd(T q, T w) {
	while (w) {
		q %= w;
		swap(q, w);
	}
	return q;
}
template<typename T>
T lcm(T q, T w) {
	return q / gcd(q, w) * w;
}

//#define int li

//const int mod = 1000000007;

void solve(bool read) {
	int n, x;
	if (!read) {
		n = rand() % 500 + 2;
		x = rand() % (2 * n - 1) + 1;
	}
	else {
		cin >> n >> x;
	}
	if (x == 1 || x == 2 * n - 1) {
		cout << "No\n";
		return;
	}

	if (n == 2) {
		cout << "Yes\n";
		cout << "1\n2\n3\n";
		return;
	}

	vector<int> p(2 * n - 1, -1);
	p[n - 1] = x;
	p[n - 2] = x + 1;
	p[n] = x - 1;
	if (x - 1 > 1) {
		p[n - 3] = 1;
	}
	else {
		p[n + 1] = 2 * n - 1;
	}
	set<int> free;
	for (int i = 1; i < 2 * n; ++i) {
		free.insert(i);
	}
	for (int c : p) {
		if (c != -1) {
			free.erase(c);
		}
	}
	for (int i = 0; i < 2 * n - 1; ++i) {
		if (p[i] == -1) {
			p[i] = *free.begin();
			free.erase(free.begin());
		}
	}

	cout << "Yes\n";
	for (int i = 0; i < 2 * n - 1; ++i) {
		cout << p[i] << "\n";
	}

	/*set<int> perm;
	for (int c : p) {
		perm.insert(c);
	}
	if (perm.size() != 2 * n - 1 || *perm.begin() != 1 || *perm.rbegin() != 2 * n - 1) {
		cout << "fuck";
		exit(0);
	}

	vector<int> q;
	for (int i = 0; i + 1 < n; ++i) {
		q.clear();
		q.resize(2 * n - 3 - i * 2);
		for (int j = 0; j < q.size(); ++j) {
			vector<int> cur = { p[j], p[j + 1], p[j + 2] };
			sort(all(cur));
			q[j] = cur[1];
		}
		q.swap(p);
	}
	if (!(p[0] == x && p.size() == 1)) {
		cout << "fuck";
		exit(0);
	}

	cout << "ok ";*/

}

Measured memory_bytes: 11776