# -*- coding: utf-8 -*-
import bisect
import heapq
import math
import random
import sys
from collections import Counter, defaultdict, deque
from decimal import ROUND_CEILING, ROUND_HALF_UP, Decimal
from functools import lru_cache, reduce
from itertools import combinations, combinations_with_replacement, product, permutations
from operator import add, mul, sub

sys.setrecursionlimit(10000)


def read_int():
    return int(input())


def read_int_n():
    return list(map(int, input().split()))


def read_float():
    return float(input())


def read_float_n():
    return list(map(float, input().split()))


def read_str():
    return input().strip()


def read_str_n():
    return list(map(str, input().split()))


def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()

        error_print(e - s, 'sec')
        return ret

    return wrap


@mt
def slv(N, X):
    if X == 1 or X == 2*N-1:
        print('No')
        return

    a = list(range(1, 2*N))
    if N == 2:
        if a.index(X) != 1:
            print('No')
            return

    else:
        ci = 2*N//2 - 1
        xi = a.index(X)
        a[xi], a[ci] = a[ci], a[xi]

        xm1i = a.index(X-1)
        a[xm1i], a[ci-1] = a[ci-1], a[xm1i]

        xp1i = a.index(X+1)
        a[xp1i], a[ci-2] = a[ci-2], a[xp1i]

        xp2i = a.index(X+2)
        a[xp2i], a[ci+1] = a[ci+1], a[xp2i]

    print('Yes')
    for v in a:
        print(v)


def main():
    N, X = read_int_n()
    slv(N, X)


if __name__ == '__main__':
    main()


### FIXED CODE ###

# -*- coding: utf-8 -*-
import bisect
import heapq
import math
import random
import sys
from collections import Counter, defaultdict, deque
from decimal import ROUND_CEILING, ROUND_HALF_UP, Decimal
from functools import lru_cache, reduce
from itertools import combinations, combinations_with_replacement, product, permutations
from operator import add, mul, sub

sys.setrecursionlimit(10000)


def read_int():
    return int(input())


def read_int_n():
    return list(map(int, input().split()))


def read_float():
    return float(input())


def read_float_n():
    return list(map(float, input().split()))


def read_str():
    return input().strip()


def read_str_n():
    return list(map(str, input().split()))


def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()

        error_print(e - s, 'sec')
        return ret

    return wrap


@mt
def slv(N, X):
    if X == 1 or X == 2*N-1:
        print('No')
        return

    a = list(range(1, 2*N))
    if N == 2:
        if a.index(X) != 1:
            print('No')
            return

    else:
        ci = 2*N//2 - 1
        xi = a.index(X)
        a[xi], a[ci] = a[ci], a[xi]

        if X != 2*N-2:
            xm1i = a.index(X-1)
            a[xm1i], a[ci-1] = a[ci-1], a[xm1i]

            xp1i = a.index(X+1)
            a[xp1i], a[ci-2] = a[ci-2], a[xp1i]

            xp2i = a.index(X+2)
            a[xp2i], a[ci+1] = a[ci+1], a[xp2i]
        else:
            xm1i = a.index(X+1)
            a[xm1i], a[ci-1] = a[ci-1], a[xm1i]

            xp1i = a.index(X-1)
            a[xp1i], a[ci-2] = a[ci-2], a[xp1i]

            xp2i = a.index(X-2)
            a[xp2i], a[ci+1] = a[ci+1], a[xp2i]

    print('Yes')
    for v in a:
        print(v)


def main():
    N, X = read_int_n()
    slv(N, X)


if __name__ == '__main__':
    main()