Codeforces Round 843 (Div. 2) |
---|
Закончено |
Петя и его друг, робот 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}$$$.
510 810 1010 4220 161000000000000000000 0
12 10 -1 24 1152921504606846976
В первом примере $$$10\ \&\ 11 = 10$$$, но $$$10\ \&\ 11\ \&\ 12 = 8$$$, поэтому ответ равен $$$12$$$.
Во втором примере $$$10 = 10$$$, поэтому ответ равен $$$10$$$.
В третьем примере можно убедиться, что требуемого $$$m$$$ не существует, поэтому необходимо вывести $$$-1$$$.
Название |
---|