Maxim loves to fill in a matrix in a special manner. Here is a pseudocode of filling in a matrix of size (*m* + 1) × (*m* + 1):

<img class="tex-graphics" src="https://espresso.codeforces.com/d53e75cbc4d1cc0d99ce701f0f5f57692d8e2d0f.png" style="max-width: 100.0%;max-height: 100.0%;"/>

Maxim asks you to count, how many numbers *m* (1 ≤ *m* ≤ *n*) are there, such that the sum of values in the cells in the row number *m* + 1 of the resulting matrix equals *t*.

Expression (*x* *xor* *y*) means applying the operation of bitwise excluding "OR" to numbers *x* and *y*. The given operation exists in all modern programming languages. For example, in languages C++ and Java it is represented by character "^", in Pascal — by "xor".
A single line contains two integers *n* and *t* (1 ≤ *n*, *t* ≤ 10<sup class="upper-index">12</sup>, *t* ≤ *n* + 1).

Please, do not use the %lld specifier to read or write 64-bit integers in C++. It is preferred to use the cin, cout streams or the %I64d specifier.

n, t = map(int, input().split())
n += 1

S = [0] * 50
S[0] -= 1

bs = []
c, d, j = 1, 0, 0

while n >> j:
    bs2 = [1] * c
    for i in range(1, c-1):
        bs2[i] = bs[c-2][i] + bs[c-2][i-1]
    bs.append(bs2)
    if n >> (j + 1):
        for i in range(c):
            S[i] += bs2[i]
    j += 1
    c += 1

j -= 2
offset = 0

while j >= 0:
    if n & (1 << j):
        for i in range(len(bs[j])):
            S[i + offset] += bs[j][i]
        offset += 1
    j -= 1

S[offset] += 1
i, c = 0, 0

while (1<<i) < t:
    c += t & (1<<i)
    i += 1

if (c):
    print(0)
else:   
    print(S[i])
    
