#include<bits/stdc++.h>
using namespace std;

struct sf {
	int l,r,x;
};
sf f[4000000];
int first[2][110000];
int last[2][110000];
int d[2][110000];
vector<int> a[2][110000];
int ask[2];
int tot,root,qn,n,q,ans;

void dfs(int k,int x) {
	first[k][x]=last[k][x]=++qn;
	for (int i=0;i<a[k][x].size();i++) {
		int y=a[k][x][i];
		d[k][y]=d[k][x]+1;
		dfs(k,y);
		last[k][x]=last[k][y];
	}
}

void ins(int k,int x,int &p,int l,int r) {
	if (first[k][x]>r || last[k][x]<l) return;
	if (!p) p=++tot;
	if (first[k][x]<=l && r<=last[k][x]) {
		if (!k) ins(1,x,f[p].x,1,n);
		else f[p].x=x;
		return;
	}
	int mid=(l+r)/2;
	ins(k,x,f[p].l,l,mid);
	ins(k,x,f[p].r,mid+1,r);
}

void count(int k,int p,int l,int r) {
	if (!p || first[k][ask[k]]>r || first[k][ask[k]]<l) return;
	if (!k) count(1,f[p].x,1,n);
	else ans=max(ans,f[p].x);
	if (l==r) return;
	int mid=(l+r)/2;
	count(k,f[p].l,l,mid);
	count(k,f[p].r,mid+1,r);
}

int main() {
	while (scanf("%d%d",&n,&q)==2) {
		for (int k=0;k<2;k++)
			for (int i=2;i<=n;i++) {
				int x;
				scanf("%d",&x);
				a[k][x].push_back(i);
			}
		for (int k=0;k<2;k++) {
			qn=0;
			dfs(k,1);
		}
		tot=root=0;
		for (int i=1;i<=n;i++) ins(0,i,root,1,n);
		ans=0;
		for (int i=0;i<q;i++) {
			for (int k=0;k<2;k++) {
				scanf("%d",ask+k);
				ask[k]=(ask[k]+ans)%n+1;
			}
			ans=0;
			count(0,root,1,n);
			printf("%d %d %d\n",ans,d[0][ask[0]]-d[0][ans]+1,d[1][ask[1]]-d[1][ans]+1);
		}
		memset(f,0,sizeof(sf)*(tot+1));
		for (int k=0;k<2;k++)
			for (int i=1;i<=n;i++)
				a[k][i].clear();
	}
}
