#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 7e4 + 5;
const int LOG = 17;
// Nhận xét: Hàm lca(u, v) cũng giống với các hàm như max, min hay gcd
// Và trong bài cũng không có truy vấn update nên ta có thể dùng Sparse Table
// Độ phức tạp: O(q * log2(n))
// Còn nếu bài có thêm truy vấn update thì ta có thể dùng Segment Tree
// Độ phức tạp: O(q * log^2(n))
int n, q;
vector<int> adj[N];
int up[LOG][N];
int tin[N], tout[N], timer;
void dfs(int u, int p) {
tin[u] = ++timer;
up[0][u] = p;
for (int i = 1; i < LOG; i++) {
up[i][u] = up[i - 1][up[i - 1][u]];
}
for (int v : adj[u]) {
if (v == p) continue;
dfs(v, u);
}
tout[u] = timer;
}
bool isAncestor(int u, int v) {
return (tin[u] <= tin[v] && tout[v] <= tout[u]);
}
int lca(int u, int v) {
if (isAncestor(u, v)) return u;
if (isAncestor(v, u)) return v;
for (int i = LOG - 1; i >= 0; i--) {
if (!isAncestor(up[i][u], v)) {
u = up[i][u];
}
}
return up[0][u];
}
int f[LOG][N]; // f[k][u] = lca của các đỉnh u, u + 1, ..., u + 2^k - 1
void precompute() {
for (int u = 1; u <= n; u++) f[0][u] = u;
for (int k = 1; (1 << k) <= n; k++) {
for (int u = 1; u + (1 << k) - 1 <= n; u++) {
f[k][u] = lca(f[k - 1][u], f[k - 1][u + (1 << (k - 1))]);
}
}
}
int getLCA(int l, int r) {
int k = log2(r - l + 1);
return lca(f[k][l], f[k][r - (1 << k) + 1]);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
timer = 0;
dfs(1, 1);
precompute();
while (q--) {
int l, r;
cin >> l >> r;
cout << getLCA(l, r) << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSA3ZTQgKyA1OyAKY29uc3QgaW50IExPRyA9IDE3OyAgCgovLyBOaOG6rW4geMOpdDogSMOgbSBsY2EodSwgdikgY8WpbmcgZ2nhu5FuZyB24bubaSBjw6FjIGjDoG0gbmjGsCBtYXgsIG1pbiBoYXkgZ2NkCi8vIFbDoCB0cm9uZyBiw6BpIGPFqW5nIGtow7RuZyBjw7MgdHJ1eSB24bqlbiB1cGRhdGUgbsOqbiB0YSBjw7MgdGjhu4MgZMO5bmcgU3BhcnNlIFRhYmxlCi8vIMSQ4buZIHBo4bupYyB04bqhcDogTyhxICogbG9nMihuKSkKLy8gQ8OybiBu4bq/dSBiw6BpIGPDsyB0aMOqbSB0cnV5IHbhuqVuIHVwZGF0ZSB0aMOsIHRhIGPDsyB0aOG7gyBkw7luZyBTZWdtZW50IFRyZWUKLy8gxJDhu5kgcGjhu6ljIHThuqFwOiBPKHEgKiBsb2deMihuKSkKaW50IG4sIHE7ICAKdmVjdG9yPGludD4gYWRqW05dOyAKCmludCB1cFtMT0ddW05dOyAKaW50IHRpbltOXSwgdG91dFtOXSwgdGltZXI7ICAgCgp2b2lkIGRmcyhpbnQgdSwgaW50IHApIHsKCXRpblt1XSA9ICsrdGltZXI7ICAgCgl1cFswXVt1XSA9IHA7Cglmb3IgKGludCBpID0gMTsgaSA8IExPRzsgaSsrKSB7CgkJdXBbaV1bdV0gPSB1cFtpIC0gMV1bdXBbaSAtIDFdW3VdXTsgCgl9Cglmb3IgKGludCB2IDogYWRqW3VdKSB7CgkJaWYgKHYgPT0gcCkgY29udGludWU7IAoJCWRmcyh2LCB1KTsgCgl9Cgl0b3V0W3VdID0gdGltZXI7IAp9Cgpib29sIGlzQW5jZXN0b3IoaW50IHUsIGludCB2KSB7CglyZXR1cm4gKHRpblt1XSA8PSB0aW5bdl0gJiYgdG91dFt2XSA8PSB0b3V0W3VdKTsgCn0KCmludCBsY2EoaW50IHUsIGludCB2KSB7CglpZiAoaXNBbmNlc3Rvcih1LCB2KSkgcmV0dXJuIHU7ICAKCWlmIChpc0FuY2VzdG9yKHYsIHUpKSByZXR1cm4gdjsgIAoJZm9yIChpbnQgaSA9IExPRyAtIDE7IGkgPj0gMDsgaS0tKSB7CgkJaWYgKCFpc0FuY2VzdG9yKHVwW2ldW3VdLCB2KSkgewoJCQl1ID0gdXBbaV1bdV07IAoJCX0KCX0KCXJldHVybiB1cFswXVt1XTsgCn0KCmludCBmW0xPR11bTl07IC8vIGZba11bdV0gPSBsY2EgY+G7p2EgY8OhYyDEkeG7iW5oIHUsIHUgKyAxLCAuLi4sIHUgKyAyXmsgLSAxIAoKdm9pZCBwcmVjb21wdXRlKCkgewoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSBmWzBdW3VdID0gdTsgIAoKCWZvciAoaW50IGsgPSAxOyAoMSA8PCBrKSA8PSBuOyBrKyspIHsKCQlmb3IgKGludCB1ID0gMTsgdSArICgxIDw8IGspIC0gMSA8PSBuOyB1KyspIHsKCQkJZltrXVt1XSA9IGxjYShmW2sgLSAxXVt1XSwgZltrIC0gMV1bdSArICgxIDw8IChrIC0gMSkpXSk7IAoJCX0KCX0KfQoKaW50IGdldExDQShpbnQgbCwgaW50IHIpIHsKCWludCBrID0gbG9nMihyIC0gbCArIDEpOyAKCXJldHVybiBsY2EoZltrXVtsXSwgZltrXVtyIC0gKDEgPDwgaykgKyAxXSk7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCQoJY2luID4+IG4gPj4gcTsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKSB7CgkJaW50IHUsIHY7IAoJCWNpbiA+PiB1ID4+IHY7IAoJCWFkalt1XS5wdXNoX2JhY2sodik7IAoJCWFkalt2XS5wdXNoX2JhY2sodSk7IAoJfQoKCXRpbWVyID0gMDsgIAoJZGZzKDEsIDEpOyAKCglwcmVjb21wdXRlKCk7ICAgCgoJd2hpbGUgKHEtLSkgewoJCWludCBsLCByOyAgCgkJY2luID4+IGwgPj4gcjsgIAoJCWNvdXQgPDwgZ2V0TENBKGwsIHIpIDw8ICdcbic7IAoJfQp9