#include<iostream>
using namespace std;
const int N=1000005;
int a[N],n,q,to[N],an=0,a1=0x3f3f3f3f;
int next(int x){
for(int i=x;i>=1;i--)
if(to[i]!=0)
return i;
}
int last(int x){
for(int i=x;i<N;i++)
if(to[i]!=0)
return i;
}
int main(){
cin>>n>>q;
//原理可以参考题解,想要答案最小就是使他小到大排序,最后结果就是 2*(an-a1) ,也就是说只要维护an 和 a1 就好了。
for(int i=1;i<=n;i++){
cin>>a[i];
an=max(an,a[i]);
a1=min(a1,a[i]);
to[a[i]]++;
}
while(q--){
int opt,x;
cin>>opt>>x;
if(opt==1){
if(to[x]==0) {
cout<<-1<<endl;
continue;
}
to[x]--;
if(x==an && to[x]==0) an=next(an);
if(x==a1 && to[x]==0) a1=last(a1);
cout<<2*(an-a1)<<endl;
}else if(opt==2){
to[x]++;
if(x>an) an=x;
if(x<a1) a1=x;
cout<<2*(an-a1)<<endl;
}
}
return 0;
}