#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
int n,m,k;
const int N=1e5+100;
ll pw2[60];
int a[N];
struct Data
{
int ans=1e9;
vector<pair<ll,int>> pre,suf;
};
Data seg[N<<2];
Data setvalue(ll x,int i)
{
Data cur;
if(k==1)cur.ans=1;
else cur.ans=1e9;
cur.pre.push_back({pw2[x],i});
// cout<<"for "<<x<<' '<<i<<' '<<pw2[x]<<endl;
cur.suf.push_back({pw2[x],i});
return cur;
}
Data merge(Data a,Data b)
{
Data cur;
cur.ans=min(a.ans,b.ans);
cur.pre=a.pre;
for(auto [x,i]:b.pre)
{
if((cur.pre.back().first&x) == x)
{
// alr have this num
}
else
{
cur.pre.push_back(make_pair(cur.pre.back().first|x,i));
}
}
reverse(begin(a.suf),end(a.suf));
reverse(begin(b.suf),end(b.suf));
cur.suf=b.suf;;
int jp=b.pre.size()-1;
for(auto [x,i]:a.suf)
{
while(jp>0 and (b.pre[jp-1].first|x)==(pw2[k]-1))jp--;
if((b.pre[jp].first|x)==(pw2[k]-1))
{
cur.ans=min(cur.ans,b.pre[jp].second-i+1);
}
if((cur.suf.back().first&x) == x)
{
// alr have this numbers
}
else
{
cur.suf.push_back(make_pair(cur.suf.back().first|x,i));
}
}
reverse(begin(cur.suf),end(cur.suf));
return cur;
}
void build(int l=1,int r=n,int v=1)
{
if(l==r)
{
seg[v]=setvalue(a[l],l);
return;
}
int m=(l+r)>>1,lc=v<<1,rc=lc|1;
build(l,m,lc);
build(m+1,r,rc);
seg[v]=merge(seg[lc],seg[rc]);
}
void update(int i,int l=1,int r=n,int v=1)
{
if(i<l or r<i)return;
if(l==r)
{
seg[v]=setvalue(a[l],l);
return;
}
int m=(l+r)>>1,lc=v<<1,rc=lc|1;
update(i,l,m,lc);
update(i,m+1,r,rc);
seg[v]=merge(seg[lc],seg[rc]);
// cout<<"Poco Loco "<<endl;
// cout<<"At "<<l<<' '<<r<<' '<<v<<endl;
// cout<<"ans "<<endl;
// cout<<seg[v].ans<<endl;
// cout<<"PRE "<<endl;
// for(auto [x,i]:seg[v].pre)
// {
// cout<<x<<' '<<i<<endl;
// }
// cout<<"SUF "<<endl;
// for(auto [x,i]:seg[v].suf)
// {
// cout<<x<<' '<<i<<endl;
// }
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
pw2[0]=1;
for(int i=1;i<60;i++)pw2[i]=pw2[i-1]<<1;
cin>>n>>k>>m;;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]--;
}
build();
while(m--)
{
ll ty;
cin>>ty;
if(ty==1)
{
int p,x;
cin>>p>>x;
x--;
a[p]=x;
update(p);
}
else
{
int x=seg[1].ans;
if(x>n)x=-1;
cout<<x<<endl;
// exit(0);
}
}
}