#include <bits/stdc++.h>
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define R(i,j,k) for(int i=(j);i>=(k);i--)
#define all(x) x.begin(),x.end()
#define sz(a) ((int)a.size())
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
const int MAXN=1e5+5,SQRT=360,INF=1e9;
int act;
struct Block{
int tim,op;
set<ii>aristas;
Block(){
tim=INF;
op=0;
}
void ins(int u,int a,int b){
if(tim==INF)tim=u;
op++;
if(a>b)swap(a,b);
if(aristas.count({a,b})){
aristas.erase({a,b});
}else{
aristas.insert({a,b});
}
}
}blk[SQRT];
int n,h[MAXN],A[MAXN],B[MAXN],U;
void init(int N, int D, int H[]) {
L(i,0,N-1)h[i]=H[i];
n=N;
act=0;
}
void curseChanges(int U_, int A_[], int B_[]) {
U=U_;
L(u,1,U){
A[u]=A_[u-1],B[u]=B_[u-1];
if(blk[act].op>=SQRT){
act++;
}
blk[act].ins(u,A[u],B[u]);
}
}
int question(int x, int y, int v) {
int l=0,r=act+1;
while(r-l>1){
int m=(r+l)/2;
if(blk[m].tim<=v){
l=m;
}else{
r=m;
}
}
set<ii>e;
if(l!=0)e=blk[l-1].aristas;
int ini=blk[l].tim;
L(i,ini,v){
int a=A[i],b=B[i];
if(a>b)swap(a,b);
if(e.count({a,b})){
e.erase({a,b});
}else{
e.insert({a,b});
}
}
vector<vector<int>>adj(n+1);
for(auto [a,b]:e){
adj[a].pb(b);
adj[b].pb(a);
}
int ans=INF;
for(auto i:adj[x]){
for(auto j:adj[y]){
ans=min(ans,abs(h[i]-h[j]));
}
}
return ans;
}