#include<bits/stdc++.h>
#define int long long
#define ls p<<1
#define rs p<<1|1
using namespace std;
int T;
int n,m;
int op;
const int N=2e5+10;
struct node{
int minn;
}tree[N<<2];
void push_up(int p){
tree[p].minn=min(tree[ls].minn,tree[rs].minn);
}
void merge(int k,int p,int l,int r,int x,int y){
if(x>r||y<l)
return ;
if(x<=l&&y>=r){
tree[p].minn+=(r-l+1);
return ;
}
int mid=(l+r)>>1;
if(x<=mid){
merge(k,ls,l,mid,x,y);
}
if(mid+1<=y){
merge(k,rs,mid+1,r,x,y);
}
push_up(p);
}
void merge2(int k,int p,int l,int r,int x){
if(l==r){
tree[p].minn+=k;
return ;
}
int mid=(l+r)>>1;
if(x<=mid){
merge2(k,ls,l,mid,x);
}
if(mid+1<=x){
merge2(k,rs,mid+1,r,x);
}
push_up(p);
}
signed main(){
cin>>T;
while(T--){
cin>>n>>m;
bool flag=0;
int last=0;
for(int i=1;i<=m;i++){
int x;
cin>>op>>x;
if(op==1&&(!flag)){
merge2(1,1,1,n,x);
}
else if(flag!=1&&op==2){
if(x+1<=n)
merge(1,1,1,n,x+1,n);
if(x-1>=1)
merge(1,1,1,n,1,x-1);
}
if(tree[1].minn&&!flag){
last=i;flag=1;
}
}
if(flag) cout<<last<<'\n';
else
cout<<-1<<'\n';
for(int i=1;i<=n;i++){
tree[i].minn=tree[i*2].minn=tree[i*3].minn=tree[i*4].minn=0;
}
}
return 0;
}