Олимпиадный тренинг

Задача . C. Интересный ряд


Петя и его друг, робот Petya++, любят решать увлекательные математические задачи.

Однажды Petya++ придумал числа \(n\) и \(x\) и написал на доске \(\)n\ \&\ (n+1)\ \&\ \dots\ \&\ m = x,\(\) где \(\&\) обозначает операцию побитового И. Затем он предложил своему другу Пете найти такое минимальное \(m\) (\(m \ge n\)), что равенство на доске выполняется.

К сожалению, Петя не смог решить эту задачу в уме и решил прибегнуть к помощи компьютера. Он довольно быстро написал программу и нашел ответ.

А справитесь ли вы с этой непростой задачей?

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\), \(x\) (\(0\le n, x \le 10^{18}\)).

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

Для каждого набора входных данных выведите одно целое число \(m\) — минимальное число такое, что равенство на доске будет выполняться.

Если равенство не выполнится ни при каком \(m\), то выведите вместо этого \(-1\).

Можно показать, что если требуемое \(m\) существует, то оно не превосходит \(5 \cdot 10^{18}\).

Примечание

В первом примере \(10\ \&\ 11 = 10\), но \(10\ \&\ 11\ \&\ 12 = 8\), поэтому ответ равен \(12\).

Во втором примере \(10 = 10\), поэтому ответ равен \(10\).

В третьем примере можно убедиться, что требуемого \(m\) не существует, поэтому необходимо вывести \(-1\).


Примеры
Входные данныеВыходные данные
1 5
10 8
10 10
10 42
20 16
1000000000000000000 0
12
10
-1
24
1152921504606846976

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя