#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int N = 1<<17;
int a[N], cnt[55];
set<int> st[55];
set<pair<int, int>> rngs;
multiset<int> lnts;
int main(){
int n, m, k;
cin>>n>>k>>m;
for (int i=1;i<=k;i++)
st[i] = {0, n+1};
for (int i=1;i<=n;i++){
cin>>a[i];
st[a[i]].insert(i);
}
for (int i=1;i<=n;i++){
int mx = 0;
for (int j=1;j<=k;j++)
mx = max(mx, *st[j].upper_bound(i - 1));
if (mx > n)
continue;
rngs.insert({i, mx});
lnts.insert(mx - i + 1);
// cout<<"Add "<<i<<" "<<mx<<endl;
}
while (m--){
int t, i, v;
cin>>t;
if (t == 2){
if (lnts.size() == 0)
cout<<-1<<'\n';
else
cout<<*lnts.begin()<<'\n';
continue;
}
cin>>i>>v;
auto u = rngs.upper_bound({i + 1, -1});
while (u != rngs.begin() and (*prev(u)).second >= i){
auto [l, r] = *prev(u);
// cout<<"discard "<<l<<" "<<r<<endl;
lnts.erase(lnts.find(r - l + 1));
rngs.erase({l, r});
}
st[a[i]].erase(i);
st[v].insert(i);
a[i] = v;
vector<int> vc = {i};
for (int j=1;j<=k;j++){
cnt[j] = 0;
if (j == v)
continue;
auto ub = st[j].upper_bound(i);
vc.push_back(*ub);
vc.push_back(*prev(ub));
}
sort(rbegin(vc), rend(vc));
int mex = 1, lst = 0;
for (int i : vc){
cnt[a[i]]++;
while (cnt[mex])
mex++;
while (cnt[a[vc[lst]]] > 1)
cnt[a[vc[lst]]]--, lst++;
if (mex == k + 1 and i != 0){
// cout<<"Add "<<i<<" "<<vc[lst]<<endl;
rngs.insert({i, vc[lst]}), lnts.insert(vc[lst] - i + 1);
}
}
// cout<<" print /////////////////////////////\n";
// for (int j=1;j<=k;j++){
// cout<<j<<" :: ";
// for (int jj : st[j])
// cout<<jj<<' ';
// cout<<'\n';
// }
// cout<<"///////////////////////////////////////\n\n\n"<<endl;
}
}