#define M 100005
using namespace std;
int T,Q,Mod,op,m;
struct tree{
int l,r,val;
}t[M<<2];
void build(int k,int l,int r){
t[k].l=l,t[k].r=r,t[k].val=1;
if(l==r)return;
int mid=l+r>>1;
build(k<<1,l,mid);
build(k<<1|1,mid+1,r);
}
void change(int k,int x,int d,int l,int r){
if(l==r&&l==x){
t[k].val=d;
return;
}
int mid=l+r>>1;
if(x<=mid)change(k<<1,x,d,l,mid);
else change(k<<1|1,x,d,mid+1,r);
t[k].val=t[k<<1].val*t[k<<1|1].val%Mod;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&Q,&Mod);
build(1,1,Q);
for(int i=1;i<=Q;i++){
scanf("%d%d",&op,&m);
if(op==1){
change(1,i,m,1,Q);
printf("%d\n",t[1].val%Mod);
}
else {
change(1,m,1,1,Q);
printf("%d\n",t[1].val%Mod);
}
}
}
return 0;
}```