C. Максим и матрица
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Максим любит заполнять матрицу специальным образом. Ниже приведен псевдокод заполнения матрицы размера (m + 1) × (m + 1):

Максим просит вас посчитать, сколько существует таких чисел m (1 ≤ m ≤ n), что сумма значений ячеек в строке с номером m + 1, полученной матрицы будет равна t.

Выражение (x xor y) обозначает применение операции побитового исключающего «ИЛИ» к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается символом «^», в Pascal — «xor».

Входные данные

В единственной строке заданы два целых числа n и t (1 ≤ n, t ≤ 1012, t ≤ n + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

Примеры
Входные данные
1 1
Выходные данные
1
Входные данные
3 2
Выходные данные
1
Входные данные
3 3
Выходные данные
0
Входные данные
1000000000000 1048576
Выходные данные
118606527258