#include<bits/stdc++.h>
using namespace std;
int t,q,mod,cnt;
struct edge
{
int l,r;
int x;
}tr[400005];
void pushup(int u)
{
tr[u].x = ((tr[tr[u].l].x % mod) * (tr[tr[u].r].x % mod)) % mod;
}
void build(int u,int l,int r)
{
if(l == r)tr[u] = {l,r,1};
else
{
tr[u] = {l,r};
int mid = (l + r) / 2;
build(u * 2,l,mid);
build(u * 2 + 1,mid + 1,r);
pushup(u);
}
}
void update(int u,int x,int v)
{
if(tr[u].l == tr[u].r)tr[u].x = v % mod;
else
{
int mid = (tr[u].l + tr[u].r) / 2;
if(x <= mid)update(tr[u].l,x,v);
else update(tr[u].r,x,v);
pushup(u);
}
}
int main()
{
cin>>t;
while(t --)
{
cnt = 0;
cin>>q>>mod;
build(1,1,q);
int op,m;
for(int i = 1;i <= q;i ++)
{
cin>>op>>m;
cnt ++;
if(op == 1)
{
update(1,cnt,m);
cout<<tr[1].x<<'\n';
}
else
{
update(1,cnt,1);
update(1,m,1);
cout<<tr[1].x<<'\n';
}
}
}
return 0;
}
(本人纯蒟蒻,刚学线段树)求大佬帮调!