#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
struct node {
int data;
node *next;
} *ge[500000];
int pre[500000][19], rank[500000], belong[500000], len[500000];
int queue[500000], root[500000], depth[500000], next[500000];
bool v[500000];
void insertEdge(int a, int b) {
static node buf[500000];
static int top = 0;
node *p = &buf[top ++];
p->data = b;
p->next = ge[a];
ge[a] = p;
}
int lca(int a, int b) {
if (depth[a] < depth[b]) swap(a, b);
int lg = 0;
while (1 << lg <= depth[a]) lg ++;
lg --;
for (int i = lg; i >= 0; i --)
if (depth[a] - (1 << i) >= depth[b]) a = pre[a][i];
if (a == b) return a;
for (int i = lg; i >= 0; i --)
if (pre[a][i] != -1 && pre[a][i] != pre[b][i]) {
a = pre[a][i];
b = pre[b][i];
}
return pre[a][0];
}
int main() {
int n, q;
scanf("%d%d", &n, &q);
for (int i = 0; i < n; i ++) ge[i] = 0;
for (int i = 0; i < n; i ++) {
scanf("%d", &next[i]);
next[i] --;
insertEdge(next[i], i);
}
memset(v, false, sizeof(v));
memset(pre, -1, sizeof(pre));
int tot = 0;
for (int i = 0; i < n; i ++)
if (! v[i]) {
int start = i;
while (! v[start]) {
v[start] = true;
start = next[start];
}
int now = i;
while (v[now]) {
v[now] = false;
now = next[now];
}
len[tot] = 0;
now = start;
while (! v[now]) {
rank[now] = len[tot];
queue[len[tot] ++] = now;
root[now] = now;
belong[now] = tot;
depth[now] = 0;
v[now] = true;
now = next[now];
}
for (int head = 0, tail = len[tot]; head < tail; head ++)
for (node *p = ge[queue[head]]; p; p = p->next)
if (! v[p->data]) {
root[p->data] = root[queue[head]];
belong[p->data] = tot;
depth[p->data] = depth[queue[head]] + 1;
pre[p->data][0] = queue[head];
for (int j = 1; 1 << j <= depth[p->data]; j ++)
pre[p->data][j] = pre[pre[p->data][j-1]][j-1];
v[p->data] = true;
queue[tail ++] = p->data;
}
tot ++;
}
for (int i = 0; i < q; i ++) {
int a, b;
scanf("%d%d", &a, &b);
a --;
b --;
if (belong[a] != belong[b]) {
printf("-1 -1\n");
continue;
}
if (root[a] == root[b]) {
int t = lca(a, b);
printf("%d %d\n", depth[a] - depth[t], depth[b] - depth[t]);
} else {
int x = root[a], y = root[b];
int s11, s12, s21, s22;
if (rank[x] < rank[y]) {
s11 = depth[a] + rank[y] - rank[x];
s12 = depth[b];
s21 = depth[a];
s22 = depth[b] + (len[belong[a]] - (rank[y] - rank[x]));
} else {
s11 = depth[a];
s12 = depth[b] + rank[x] - rank[y];
s21 = depth[a] + (len[belong[a]] - (rank[x] - rank[y]));
s22 = depth[b];
}
if (max(s11, s12) > max(s21, s22)) {
swap(s11, s21);
swap(s12, s22);
}
if (max(s11, s12) == max(s21, s22) && min(s11, s12) > min(s21, s22)) {
swap(s11, s21);
swap(s12, s22);
}
if (max(s11, s12) == max(s21, s22) && min(s11, s12) == min(s21, s22) && s21 >= s22) {
swap(s11, s21);
swap(s12, s22);
}
printf("%d %d\n", s11, s12);
}
}
return 0;
}
CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBub2RlIHsKCWludCBkYXRhOwoJbm9kZSAqbmV4dDsKfSAqZ2VbNTAwMDAwXTsKCmludCBwcmVbNTAwMDAwXVsxOV0sIHJhbmtbNTAwMDAwXSwgYmVsb25nWzUwMDAwMF0sIGxlbls1MDAwMDBdOwppbnQgcXVldWVbNTAwMDAwXSwgcm9vdFs1MDAwMDBdLCBkZXB0aFs1MDAwMDBdLCBuZXh0WzUwMDAwMF07CmJvb2wgdls1MDAwMDBdOwoKdm9pZCBpbnNlcnRFZGdlKGludCBhLCBpbnQgYikgewoJc3RhdGljIG5vZGUgYnVmWzUwMDAwMF07CglzdGF0aWMgaW50IHRvcCA9IDA7Cglub2RlICpwID0gJmJ1Zlt0b3AgKytdOwoJcC0+ZGF0YSA9IGI7CglwLT5uZXh0ID0gZ2VbYV07CglnZVthXSA9IHA7Cn0KCmludCBsY2EoaW50IGEsIGludCBiKSB7CglpZiAoZGVwdGhbYV0gPCBkZXB0aFtiXSkgc3dhcChhLCBiKTsKCWludCBsZyA9IDA7Cgl3aGlsZSAoMSA8PCBsZyA8PSBkZXB0aFthXSkgbGcgKys7CglsZyAtLTsKCWZvciAoaW50IGkgPSBsZzsgaSA+PSAwOyBpIC0tKQoJCWlmIChkZXB0aFthXSAtICgxIDw8IGkpID49IGRlcHRoW2JdKSBhID0gcHJlW2FdW2ldOwoJaWYgKGEgPT0gYikgcmV0dXJuIGE7Cglmb3IgKGludCBpID0gbGc7IGkgPj0gMDsgaSAtLSkKCQlpZiAocHJlW2FdW2ldICE9IC0xICYmIHByZVthXVtpXSAhPSBwcmVbYl1baV0pIHsKCQkJYSA9IHByZVthXVtpXTsKCQkJYiA9IHByZVtiXVtpXTsKCQl9CglyZXR1cm4gcHJlW2FdWzBdOwp9CgppbnQgbWFpbigpIHsKCWludCBuLCBxOwoJc2NhbmYoIiVkJWQiLCAmbiwgJnEpOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICsrKSBnZVtpXSA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIHsKCQlzY2FuZigiJWQiLCAmbmV4dFtpXSk7CgkJbmV4dFtpXSAtLTsKCQlpbnNlcnRFZGdlKG5leHRbaV0sIGkpOwoJfQoJCgltZW1zZXQodiwgZmFsc2UsIHNpemVvZih2KSk7CgltZW1zZXQocHJlLCAtMSwgc2l6ZW9mKHByZSkpOwoJaW50IHRvdCA9IDA7Cglmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspCgkJaWYgKCEgdltpXSkgewoJCQlpbnQgc3RhcnQgPSBpOwoJCQl3aGlsZSAoISB2W3N0YXJ0XSkgewoJCQkJdltzdGFydF0gPSB0cnVlOwoJCQkJc3RhcnQgPSBuZXh0W3N0YXJ0XTsKCQkJfQoJCQlpbnQgbm93ID0gaTsKCQkJd2hpbGUgKHZbbm93XSkgewoJCQkJdltub3ddID0gZmFsc2U7CgkJCQlub3cgPSBuZXh0W25vd107CgkJCX0KCQkJbGVuW3RvdF0gPSAwOwoJCQlub3cgPSBzdGFydDsKCQkJd2hpbGUgKCEgdltub3ddKSB7CgkJCQlyYW5rW25vd10gPSBsZW5bdG90XTsKCQkJCXF1ZXVlW2xlblt0b3RdICsrXSA9IG5vdzsKCQkJCXJvb3Rbbm93XSA9IG5vdzsKCQkJCWJlbG9uZ1tub3ddID0gdG90OwoJCQkJZGVwdGhbbm93XSA9IDA7CgkJCQl2W25vd10gPSB0cnVlOwoJCQkJbm93ID0gbmV4dFtub3ddOwoJCQl9CgkJCWZvciAoaW50IGhlYWQgPSAwLCB0YWlsID0gbGVuW3RvdF07IGhlYWQgPCB0YWlsOyBoZWFkICsrKQoJCQkJZm9yIChub2RlICpwID0gZ2VbcXVldWVbaGVhZF1dOyBwOyBwID0gcC0+bmV4dCkKCQkJCQlpZiAoISB2W3AtPmRhdGFdKSB7CgkJCQkJCXJvb3RbcC0+ZGF0YV0gPSByb290W3F1ZXVlW2hlYWRdXTsKCQkJCQkJYmVsb25nW3AtPmRhdGFdID0gdG90OwoJCQkJCQlkZXB0aFtwLT5kYXRhXSA9IGRlcHRoW3F1ZXVlW2hlYWRdXSArIDE7CgkJCQkJCXByZVtwLT5kYXRhXVswXSA9IHF1ZXVlW2hlYWRdOwoJCQkJCQlmb3IgKGludCBqID0gMTsgMSA8PCBqIDw9IGRlcHRoW3AtPmRhdGFdOyBqICsrKQoJCQkJCQkJcHJlW3AtPmRhdGFdW2pdID0gcHJlW3ByZVtwLT5kYXRhXVtqLTFdXVtqLTFdOwoJCQkJCQl2W3AtPmRhdGFdID0gdHJ1ZTsKCQkJCQkJcXVldWVbdGFpbCArK10gPSBwLT5kYXRhOwoJCQkJCX0KCQkJdG90ICsrOwoJCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpICsrKSB7CgkJaW50IGEsIGI7CgkJc2NhbmYoIiVkJWQiLCAmYSwgJmIpOwoJCWEgLS07CgkJYiAtLTsKCQlpZiAoYmVsb25nW2FdICE9IGJlbG9uZ1tiXSkgewoJCQlwcmludGYoIi0xIC0xXG4iKTsKCQkJY29udGludWU7CgkJfQoJCWlmIChyb290W2FdID09IHJvb3RbYl0pIHsKCQkJaW50IHQgPSBsY2EoYSwgYik7CgkJCXByaW50ZigiJWQgJWRcbiIsIGRlcHRoW2FdIC0gZGVwdGhbdF0sIGRlcHRoW2JdIC0gZGVwdGhbdF0pOwoJCX0gZWxzZSB7CgkJCWludCB4ID0gcm9vdFthXSwgeSA9IHJvb3RbYl07CgkJCWludCBzMTEsIHMxMiwgczIxLCBzMjI7CgkJCWlmIChyYW5rW3hdIDwgcmFua1t5XSkgewoJCQkJczExID0gZGVwdGhbYV0gKyByYW5rW3ldIC0gcmFua1t4XTsKCQkJCXMxMiA9IGRlcHRoW2JdOwoJCQkJczIxID0gZGVwdGhbYV07CgkJCQlzMjIgPSBkZXB0aFtiXSArIChsZW5bYmVsb25nW2FdXSAtIChyYW5rW3ldIC0gcmFua1t4XSkpOwoJCQl9IGVsc2UgewoJCQkJczExID0gZGVwdGhbYV07CgkJCQlzMTIgPSBkZXB0aFtiXSArIHJhbmtbeF0gLSByYW5rW3ldOwoJCQkJczIxID0gZGVwdGhbYV0gKyAobGVuW2JlbG9uZ1thXV0gLSAocmFua1t4XSAtIHJhbmtbeV0pKTsKCQkJCXMyMiA9IGRlcHRoW2JdOwoJCQl9CgkJCWlmIChtYXgoczExLCBzMTIpID4gbWF4KHMyMSwgczIyKSkgewoJCQkJc3dhcChzMTEsIHMyMSk7CgkJCQlzd2FwKHMxMiwgczIyKTsKCQkJfQoJCQlpZiAobWF4KHMxMSwgczEyKSA9PSBtYXgoczIxLCBzMjIpICYmIG1pbihzMTEsIHMxMikgPiBtaW4oczIxLCBzMjIpKSB7CgkJCQlzd2FwKHMxMSwgczIxKTsKCQkJCXN3YXAoczEyLCBzMjIpOwoJCQl9CgkJCWlmIChtYXgoczExLCBzMTIpID09IG1heChzMjEsIHMyMikgJiYgbWluKHMxMSwgczEyKSA9PSBtaW4oczIxLCBzMjIpICYmIHMyMSA+PSBzMjIpIHsKCQkJCXN3YXAoczExLCBzMjEpOwoJCQkJc3dhcChzMTIsIHMyMik7CgkJCX0KCQkJcHJpbnRmKCIlZCAlZFxuIiwgczExLCBzMTIpOwoJCX0KCX0KCQoJcmV0dXJuIDA7Cn0K