rt,WA 2
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, m, blocksize, ans;
int k[N], st[N], nxt[N], blocknum[N];
int query(int x) {
int ret = 0;
while(1) {
ret += st[x];
ans = x;
if(!nxt[x]) return ret;
x = nxt[x];
}
}
int main() {
cin >> n >> m;
blocksize = sqrt(n);
for(int i = 1; i <= n; i++) scanf("%d", k + i);
for(int i = 1; i <= n; i++) blocknum[i] = (i - 1) / blocksize + 1;
for(int i = n; i; i--) {
if(i + k[i] > n) st[i] = 1;
else {
if(blocknum[i] == blocknum[i + k[i]]) {
st[i] = st[i + k[i]] + 1;
nxt[i] = nxt[i + k[i]];
}
else {
st[i] = 1;
nxt[i] = i + k[i];
}
}
}
while(m--) {
int opt, x, y;
scanf("%d%d", &opt, &x);
if(opt == 1) {
int K = query(x);
printf("%d %d\n", ans, K);
}
else {
scanf("%d", &y);
k[x] = y;
for(int i = x; i >= (blocknum[x] - 1) * blocksize + 1; i--) {
if(blocknum[i] == blocknum[i + k[i]]) {
st[i] = st[i + k[i]] + 1;
nxt[i] = nxt[i + k[i]];
}
else {
st[i] = 1;
nxt[i] = i + k[i];
}
}
}
}
return 0;
}