#include <bits/stdc++.h>
using namespace std;
const int limite = 100005;
const int base = 100;
const int infinito = 1000000005;
void minimiza(int &a, int b) { a = min(a, b); }
int n, r;
vector<int> g[limite];
int a[limite];
int profundidad[limite];
int altura[limite];
int alcanzables[limite];
vector<int> lista[limite];
void eliminapadre(int u, int p, int prof) {
  profundidad[u] = prof;
  altura[u] = 1;
  vector<int> &ar = g[u];
  vector<int> nextar;
  for (int i = 0; i < int(ar.size()); i++) {
    int v = ar[i];
    if (v != p) {
      nextar.push_back(v);
      eliminapadre(v, u, prof + 1);
      altura[u] = max(altura[u], altura[v] + 1);
    }
  }
  ar = nextar;
}
void obtiene(int uini, int u) {
  vector<int> &lisini = lista[uini];
  if (u == uini or int(lista[u].size()) == 0) {
    minimiza(lisini[profundidad[u] - profundidad[uini]], a[u]);
    vector<int> &ar = g[u];
    for (int i = 0; i < int(ar.size()); i++) obtiene(uini, ar[i]);
    return;
  }
  vector<int> &lis = lista[u];
  for (int i = 0, j = profundidad[u] - profundidad[uini]; i < int(lis.size());
       i++, j++)
    minimiza(lisini[j], lis[i]);
}
void genera(int u) {
  alcanzables[u] = 1;
  vector<int> &ar = g[u];
  for (int i = 0; i < int(ar.size()); i++) {
    int v = ar[i];
    genera(v);
    alcanzables[u] += alcanzables[v];
  }
  if (alcanzables[u] > base) {
    alcanzables[u] = 1;
    vector<int> &lis = lista[u];
    lis = vector<int>(altura[u], infinito);
    obtiene(u, u);
    for (int i = 1; i < int(lis.size()); i++) minimiza(lis[i], lis[i - 1]);
  }
}
int calcula(int u, int k) {
  vector<int> &lis = lista[u];
  if (int(lis.size()) > 0) return lis[min(int(lis.size()) - 1, k)];
  int sol = a[u];
  if (k == 0) return sol;
  vector<int> &ar = g[u];
  for (int i = 0; i < int(ar.size()); i++) minimiza(sol, calcula(ar[i], k - 1));
  return sol;
}
int main() {
  scanf("%d%d", &n, &r);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  eliminapadre(r, 0, 0);
  genera(r);
  int casos;
  scanf("%d", &casos);
  int last = 0;
  for (int cas = 0; cas < casos; cas++) {
    int p, q;
    scanf("%d%d", &p, &q);
    int x = (p + last) % n + 1;
    int k = (q + last) % n;
    last = calcula(x, k);
    printf("%d\n", last);
  }
}
