#include <bits/stdc++.h>
using namespace std;
#define int long long
#define bint __int128
#define _3bkarm cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define getrand(l, r) uniform_int_distribution<long long>(l, r)(rng)
const int mod = 1000'000'007;
int power(int a, int p) {
int ans = 1;
while (p > 0) {
if (p % 2 == 1) ans = ans * a % mod;
a = a * a % mod, p /= 2;
}
return ans;
}
int solve(int h, int v, int t) {
--h;
if (t == 0) return v % mod;
int level = __lg(v);
int o = v - (1LL << level);
int limit = (1LL << level) - 1;
--t;
if (o < limit) ++o, ++v;
if (t == 0) return v % mod;
int toEnd = limit - o;
int d = min(h - level, t / 2);
v = power(2, d) * (v + 1) % mod - 1;
if (v < 0) v += mod; level += d;
int remain = t - 2 * d;
if (remain == 0) return v;
if (level < h) return 2 * v % mod;
if (toEnd == 0) return v;
int move = 0, c = remain / 2;
if (d > 30) {
move = c;
} else {
bint x = (1LL << d), y = toEnd, z = x * y;
if (c <= z) move = c; else move = z;
}
v += move, v %= mod;
return v;
}
void getShitDone() {
int h, q;
cin >> h >> q;
while (q--) {
int v, t;
cin >> v >> t;
cout << solve(h, v, t) << '\n';
}
}
signed main() {
_3bkarm
int ts = 1;
// cin >> ts;
while (ts--) getShitDone();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgYmludCBfX2ludDEyOAojZGVmaW5lIF8zYmthcm0gY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7IGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCm10MTk5Mzcgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CiNkZWZpbmUgZ2V0cmFuZChsLCByKSB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248bG9uZyBsb25nPihsLCByKShybmcpCgpjb25zdCBpbnQgbW9kID0gMTAwMCcwMDAnMDA3OwoKaW50IHBvd2VyKGludCBhLCBpbnQgcCkgewogICAgaW50IGFucyA9IDE7CiAgICB3aGlsZSAocCA+IDApIHsKICAgICAgICBpZiAocCAlIDIgPT0gMSkgYW5zID0gYW5zICogYSAlIG1vZDsKICAgICAgICBhID0gYSAqIGEgJSBtb2QsIHAgLz0gMjsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBzb2x2ZShpbnQgaCwgaW50IHYsIGludCB0KSB7CiAgICAtLWg7CiAgICBpZiAodCA9PSAwKSByZXR1cm4gdiAlIG1vZDsKCiAgICBpbnQgbGV2ZWwgPSBfX2xnKHYpOwogICAgaW50IG8gPSB2IC0gKDFMTCA8PCBsZXZlbCk7CiAgICBpbnQgbGltaXQgPSAoMUxMIDw8IGxldmVsKSAtIDE7CgogICAgLS10OwogICAgaWYgKG8gPCBsaW1pdCkgKytvLCArK3Y7CgogICAgaWYgKHQgPT0gMCkgcmV0dXJuIHYgJSBtb2Q7CgogICAgaW50IHRvRW5kID0gbGltaXQgLSBvOwogICAgaW50IGQgPSBtaW4oaCAtIGxldmVsLCB0IC8gMik7CgogICAgdiA9IHBvd2VyKDIsIGQpICogKHYgKyAxKSAlIG1vZCAtIDE7CiAgICBpZiAodiA8IDApIHYgKz0gbW9kOyBsZXZlbCArPSBkOwoKICAgIGludCByZW1haW4gPSB0IC0gMiAqIGQ7CiAgICBpZiAocmVtYWluID09IDApIHJldHVybiB2OwoKICAgIGlmIChsZXZlbCA8IGgpIHJldHVybiAyICogdiAlIG1vZDsKCiAgICBpZiAodG9FbmQgPT0gMCkgcmV0dXJuIHY7CgogICAgaW50IG1vdmUgPSAwLCBjID0gcmVtYWluIC8gMjsKICAgIGlmIChkID4gMzApIHsKICAgICAgICBtb3ZlID0gYzsKICAgIH0gZWxzZSB7CiAgICAgICAgYmludCB4ID0gKDFMTCA8PCBkKSwgeSA9IHRvRW5kLCB6ID0geCAqIHk7CiAgICAgICAgaWYgKGMgPD0geikgbW92ZSA9IGM7IGVsc2UgbW92ZSA9IHo7CiAgICB9CiAgICB2ICs9IG1vdmUsIHYgJT0gbW9kOwoKICAgIHJldHVybiB2Owp9Cgp2b2lkIGdldFNoaXREb25lKCkgewogICAgaW50IGgsIHE7CiAgICBjaW4gPj4gaCA+PiBxOwogICAgd2hpbGUgKHEtLSkgewogICAgICAgIGludCB2LCB0OwogICAgICAgIGNpbiA+PiB2ID4+IHQ7CiAgICAgICAgY291dCA8PCBzb2x2ZShoLCB2LCB0KSA8PCAnXG4nOwogICAgfQp9CgpzaWduZWQgbWFpbigpIHsKICAgIF8zYmthcm0KCiAgICBpbnQgdHMgPSAxOwovLyAgICBjaW4gPj4gdHM7CiAgICB3aGlsZSAodHMtLSkgZ2V0U2hpdERvbmUoKTsKCiAgICByZXR1cm4gMDsKfQ==