#include using namespace std; #include using namespace atcoder; using ll = int64_t; using ul = uint64_t; using ld = long double; using vi = vector; using vd = vector; using vc = vector; using vs = vector; using vb = vector; using vl = vector; using vvi = vector; using vvd = vector; using vvc = vector; using vvb = vector; using vvl = vector; using mint = modint998244353; using vm = vector; void solve(vl &P) { ll L,R; cin >> L >> R; if (L == 0 && R == 0) { cout << 0 << endl; return; } ll ans = -1; for (int i = 0; i < 38; i++) { if (P[i] < L || R < P[i]) continue; ll a = P[i],b = 0; for (int j = i - 1; j >= 0; j--) { if (b + P[j] <= R) b += P[j]; } if (b < L) continue; ans = max(ans, a*b); } cout << ans << endl; } int main() { vl P(40, 1); for (int i = 1; i < 40; i++) { P[i] *= P[i - 1]*ll(2); } int T; cin >> T; for (int i = 0; i < T; i++) { solve(P); } return 0; }