#include<cstdio>
#include<cmath>
#define int long long
int n,m;
int k[200010];
struct Block
{
int len;
int cnt;
int l[200010],r[200010];
int belong[200010];
int v[200010];
int s[200010];
void build()
{
len=sqrt(n);
cnt=n/len;
if(n%len) cnt++;
for(int i=1;i<=cnt;i++)
{
l[i]=(i-1)*len+1;
r[i]=i*len;
}
r[cnt]=n;
for(int i=1;i<=n;i++) belong[i]=(i-1)/len+1;
for(int i=n;i>=1;i--)
{
v[i]=i+k[i];
if(v[i]>r[belong[i]]) s[i]=1;
else s[i]=s[v[i]]+1,v[i]=v[v[i]];
}
}
void update(int j,int num)
{
k[j]=num;
for(int i=r[belong[j]];i>=l[belong[j]];i--)
{
v[i]=i+k[i];
if(v[i]>r[belong[i]]) s[i]=1;
else s[i]=s[v[i]]+1,v[i]=v[v[i]];
}
}
void query(int j)
{
int ans=0;
int pre;
while(j<=n) ans+=s[j],pre=j,j=v[j];
printf("%lld %lld\n",pre,ans);
}
}block;
signed main()
{
scanf("%lld",&n);
scanf("%lld",&m);
for(int i=1;i<=n;i++) scanf("%lld",&k[i]);
block.build();
while(m--)
{
int op,x,y;
scanf("%lld",&op);
if(op==0)
{
scanf("%lld%lld",&x,&y);
block.update(x,y);
}
else
{
scanf("%lld",&x);
block.query(x);
}
}
return 0;
}