#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m, q;
cin >> n >> m >> q;
int s = sqrt(q);
vector<pair<int, int>> query;
vector<vector<pair<int, int>>> swaps(m + 2);
vector<int> inclu, cur(n + 1), vis(n + 1), pos(n + 1), tpos(n + 1), a(s), b(s);
vector<vector<int>> link(q + 1, vector<int>(n + 1));
vector<int> ans(q);
int tot = 0;
for (int i = 0; i < (q + s - 1) / s; ++i) {
query.clear(), inclu.clear();;
for (int j = 1; j <= n; ++j) cur[j] = j, vis[j] = false;
for (int j = i * s; j < min(q, (i + 1) * s); ++j) {
int op, x, y;
cin >> op >> x;
if (op == 1) {
cin >> y;
swaps[y].emplace_back(j, x);
}
else {
query.emplace_back(j, x);
inclu.emplace_back(x);
vis[x] = true;
}
}
//cout << "-1\n";
for (int j = 1; j <= m; ++j) {
for (auto o : swaps[j]) {
int& x = cur[o.second], & y = cur[o.second + 1];
swap(x, y);
if (o.first / s == i) {
if (!vis[x]) {
vis[x] = true;
inclu.emplace_back(x);
}
if (!vis[y]) {
vis[y] = true;
inclu.emplace_back(y);
}
}
}
}
//cout << "-1\n";
int len = 0, cnt = inclu.size();
for (int j = 1; j <= n; ++j) cur[j] = j, pos[j] = j;
for (int j = 0; j < cnt; ++j) tpos[j] = pos[inclu[j]];
for (int j = 1; j <= m; ++j) {
for (auto o : swaps[j]) {
int& x = cur[o.second], & y = cur[o.second + 1];
if (o.first / s == i) {
for (int k = 0; k < cnt; ++k) {
link[len][tpos[k]] = pos[inclu[k]];
}
a[len] = o.first, b[len] = o.second;
++len;
}
swap(x, y);
swap(pos[x], pos[y]);
if(o.first / s== i)
for (int k = 0; k < cnt; ++k) {
tpos[k] = pos[inclu[k]];
}
}
}
for (int k = 0; k < cnt; ++k) {
link[len][tpos[k]] = pos[inclu[k]];
}
a[len] = 1e9;
len++;
//cout << "-1\n";
for (auto o : query) {
int t = o.first, p = o.second;
for (int j = 0; j < len; ++j) {
p = link[j][p];
if (a[j] < t) {
if (b[j] == p) p++;
else if (b[j] == p - 1) p--;
}
}
ans[tot++] = p;
//cout << p << "\n";
}
//cout << "-1\n";
}
for (int i = 0; i < tot; ++i) cout << ans[i] << "\n";
return 0;
}