// competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/binomial_coefficient_prime_mod
#include "EnumerativeCombinatorics/binomial_coefficient_prime_mod.hpp"
#include <atcoder/modint>
#include <bits/stdc++.h>
using namespace std;
using mint = atcoder::modint;
int main()
{
int T, m;
cin >> T >> m;
mint::set_mod(m);
combination<atcoder::modint> comb(min(m, 10000000) - 1);
for (int i = 0; i < T; i++)
{
int n, k;
cin >> n >> k;
cout << comb(n, k).val() << endl;
}
return 0;
}
#line 1 "test/EnumerativeCombinatorics/binomial_coefficient_prime_mod/yosupo-binomial_coefficient_prime_mod.cpp"
// competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/binomial_coefficient_prime_mod
#line 1 "EnumerativeCombinatorics/binomial_coefficient_prime_mod.hpp"
#include <bits/stdc++.h>
using namespace std;
template <class mint>
class combination
{
private:
vector<mint> fact, ifact;
public:
combination(int n) : fact(n + 1), ifact(n + 1)
{
assert(n < mint::mod());
fact[0] = 1;
for (int i = 1; i <= n; ++i)
fact[i] = fact[i - 1] * i;
ifact[n] = fact[n].inv();
for (int i = n; i >= 1; --i)
ifact[i - 1] = ifact[i] * i;
}
mint operator()(int n, int k)
{
if (k < 0 || k > n)
return 0;
return fact[n] * ifact[k] * ifact[n - k];
}
};
#line 4 "test/EnumerativeCombinatorics/binomial_coefficient_prime_mod/yosupo-binomial_coefficient_prime_mod.cpp"
#include <atcoder/modint>
#line 6 "test/EnumerativeCombinatorics/binomial_coefficient_prime_mod/yosupo-binomial_coefficient_prime_mod.cpp"
using namespace std;
using mint = atcoder::modint;
int main()
{
int T, m;
cin >> T >> m;
mint::set_mod(m);
combination<atcoder::modint> comb(min(m, 10000000) - 1);
for (int i = 0; i < T; i++)
{
int n, k;
cin >> n >> k;
cout << comb(n, k).val() << endl;
}
return 0;
}