#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAXN = 200500;
const int LOG = 20;
int n, q;
vector<int> g[MAXN];
int parent_[LOG][MAXN];
int depth_[MAXN];
int tin[MAXN], tout[MAXN], tim = 0;
struct Cmp { bool operator()(int a, int b) const { return tin[a] < tin[b]; } };
void build_dfs(int root = 1){
// iterative DFS to compute tin/tout, depth and parent_[0]
vector<pair<int,int>> st; // (v, next_child_index)
st.reserve(n);
for (int i=1;i<=n;i++) tin[i]=tout[i]=0;
tim = 0;
depth_[root] = 0;
parent_[0][root] = 0;
st.emplace_back(root, 0);
while(!st.empty()){
int v = st.back().first;
int &ci = st.back().second;
if (ci == 0){
tin[v] = ++tim;
}
if (ci < (int)g[v].size()){
int u = g[v][ci++];
if (u == parent_[0][v]) continue;
parent_[0][u] = v;
depth_[u] = depth_[v] + 1;
st.emplace_back(u, 0);
} else {
tout[v] = ++tim;
st.pop_back();
}
}
}
bool is_ancestor(int u, int v){ // u ancestor of v
return tin[u] <= tin[v] && tout[u] >= tout[v];
}
int lca(int u, int v){
if (u==0) return v;
if (v==0) return u;
if (is_ancestor(u,v)) return u;
if (is_ancestor(v,u)) return v;
for (int k = LOG-1; k >= 0; --k){
int pu = parent_[k][u];
if (pu && !is_ancestor(pu, v)) u = pu;
}
return parent_[0][u];
}
int dist(int u, int v){
int w = lca(u,v);
return depth_[u] + depth_[v] - 2*depth_[w];
}
struct Query{int l,r,idx,block;};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
// file IO as problem statement
freopen("kingdom.inp","r",stdin);
freopen("kingdom.out","w",stdout);
if (!(cin >> n >> q)) return 0;
for (int i=1;i<=n;i++) g[i].clear();
for (int i=0;i<n-1;i++){
int u,v; cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
// build dfs for lca
build_dfs(1);
// binary lifting
for (int k=1;k<LOG;k++){
for (int v=1; v<=n; v++){
int p = parent_[k-1][v];
parent_[k][v] = p ? parent_[k-1][p] : 0;
}
}
vector<Query> qs(q);
for (int i=0;i<q;i++){
int l,r; cin >> l >> r;
qs[i].l = l; qs[i].r = r; qs[i].idx = i;
}
int BLOCK = max(1, (int)sqrt(n));
for (int i=0;i<q;i++) qs[i].block = qs[i].l / BLOCK;
sort(qs.begin(), qs.end(), [&](const Query &a, const Query &b){
if (a.block != b.block) return a.block < b.block;
if (a.block & 1) return a.r > b.r;
return a.r < b.r;
});
set<int, Cmp> st; // stores node ids, ordered by tin
ll sum = 0; // sum of pairwise adjacent distances in cyclic order
auto add_node = [&](int v){
if (st.empty()){
st.insert(v);
return;
}
auto it = st.lower_bound(v);
int s = (it == st.end() ? *st.begin() : *it);
int p = (it == st.begin() ? *st.rbegin() : *prev(it));
sum += (ll)dist(p, v) + dist(v, s) - dist(p, s);
st.insert(it, v);
};
auto remove_node = [&](int v){
if (st.size() == 1){
st.erase(v);
sum = 0;
return;
}
auto it = st.find(v);
auto it_s = next(it);
if (it_s == st.end()) it_s = st.begin();
int s = *it_s;
int p = (it == st.begin() ? *st.rbegin() : *prev(it));
sum -= (ll)dist(p, v) + dist(v, s) - dist(p, s);
st.erase(it);
};
vector<long long> ans(q);
int curL = 1, curR = 0;
for (auto &qu : qs){
int L = qu.l, R = qu.r;
while (curL > L) { add_node(--curL); }
while (curR < R) { add_node(++curR); }
while (curL < L) { remove_node(curL++); }
while (curR > R) { remove_node(curR--); }
if (st.empty()) ans[qu.idx] = 0;
else ans[qu.idx] = sum/2 + 1; // number of vertices = edges + 1
}
for (int i=0;i<q;i++) cout << ans[i] << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpjb25zdCBpbnQgTUFYTiA9IDIwMDUwMDsKY29uc3QgaW50IExPRyA9IDIwOwppbnQgbiwgcTsKdmVjdG9yPGludD4gZ1tNQVhOXTsKaW50IHBhcmVudF9bTE9HXVtNQVhOXTsKaW50IGRlcHRoX1tNQVhOXTsKaW50IHRpbltNQVhOXSwgdG91dFtNQVhOXSwgdGltID0gMDsKCnN0cnVjdCBDbXAgeyBib29sIG9wZXJhdG9yKCkoaW50IGEsIGludCBiKSBjb25zdCB7IHJldHVybiB0aW5bYV0gPCB0aW5bYl07IH0gfTsKCnZvaWQgYnVpbGRfZGZzKGludCByb290ID0gMSl7CiAgICAvLyBpdGVyYXRpdmUgREZTIHRvIGNvbXB1dGUgdGluL3RvdXQsIGRlcHRoIGFuZCBwYXJlbnRfWzBdCiAgICB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4gc3Q7IC8vICh2LCBuZXh0X2NoaWxkX2luZGV4KQogICAgc3QucmVzZXJ2ZShuKTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgdGluW2ldPXRvdXRbaV09MDsKICAgIHRpbSA9IDA7CiAgICBkZXB0aF9bcm9vdF0gPSAwOwogICAgcGFyZW50X1swXVtyb290XSA9IDA7CiAgICBzdC5lbXBsYWNlX2JhY2socm9vdCwgMCk7CiAgICB3aGlsZSghc3QuZW1wdHkoKSl7CiAgICAgICAgaW50IHYgPSBzdC5iYWNrKCkuZmlyc3Q7CiAgICAgICAgaW50ICZjaSA9IHN0LmJhY2soKS5zZWNvbmQ7CiAgICAgICAgaWYgKGNpID09IDApewogICAgICAgICAgICB0aW5bdl0gPSArK3RpbTsKICAgICAgICB9CiAgICAgICAgaWYgKGNpIDwgKGludClnW3ZdLnNpemUoKSl7CiAgICAgICAgICAgIGludCB1ID0gZ1t2XVtjaSsrXTsKICAgICAgICAgICAgaWYgKHUgPT0gcGFyZW50X1swXVt2XSkgY29udGludWU7CiAgICAgICAgICAgIHBhcmVudF9bMF1bdV0gPSB2OwogICAgICAgICAgICBkZXB0aF9bdV0gPSBkZXB0aF9bdl0gKyAxOwogICAgICAgICAgICBzdC5lbXBsYWNlX2JhY2sodSwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdG91dFt2XSA9ICsrdGltOwogICAgICAgICAgICBzdC5wb3BfYmFjaygpOwogICAgICAgIH0KICAgIH0KfQoKYm9vbCBpc19hbmNlc3RvcihpbnQgdSwgaW50IHYpeyAvLyB1IGFuY2VzdG9yIG9mIHYKICAgIHJldHVybiB0aW5bdV0gPD0gdGluW3ZdICYmIHRvdXRbdV0gPj0gdG91dFt2XTsKfQoKaW50IGxjYShpbnQgdSwgaW50IHYpewogICAgaWYgKHU9PTApIHJldHVybiB2OwogICAgaWYgKHY9PTApIHJldHVybiB1OwogICAgaWYgKGlzX2FuY2VzdG9yKHUsdikpIHJldHVybiB1OwogICAgaWYgKGlzX2FuY2VzdG9yKHYsdSkpIHJldHVybiB2OwogICAgZm9yIChpbnQgayA9IExPRy0xOyBrID49IDA7IC0tayl7CiAgICAgICAgaW50IHB1ID0gcGFyZW50X1trXVt1XTsKICAgICAgICBpZiAocHUgJiYgIWlzX2FuY2VzdG9yKHB1LCB2KSkgdSA9IHB1OwogICAgfQogICAgcmV0dXJuIHBhcmVudF9bMF1bdV07Cn0KCmludCBkaXN0KGludCB1LCBpbnQgdil7CiAgICBpbnQgdyA9IGxjYSh1LHYpOwogICAgcmV0dXJuIGRlcHRoX1t1XSArIGRlcHRoX1t2XSAtIDIqZGVwdGhfW3ddOwp9CgpzdHJ1Y3QgUXVlcnl7aW50IGwscixpZHgsYmxvY2s7fTsKCmludCBtYWluKCl7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKG51bGxwdHIpOwoKICAgIC8vIGZpbGUgSU8gYXMgcHJvYmxlbSBzdGF0ZW1lbnQKICAgIGZyZW9wZW4oImtpbmdkb20uaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3Blbigia2luZ2RvbS5vdXQiLCJ3IixzdGRvdXQpOwoKICAgIGlmICghKGNpbiA+PiBuID4+IHEpKSByZXR1cm4gMDsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgZ1tpXS5jbGVhcigpOwogICAgZm9yIChpbnQgaT0wO2k8bi0xO2krKyl7CiAgICAgICAgaW50IHUsdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIC8vIGJ1aWxkIGRmcyBmb3IgbGNhCiAgICBidWlsZF9kZnMoMSk7CiAgICAvLyBiaW5hcnkgbGlmdGluZwogICAgZm9yIChpbnQgaz0xO2s8TE9HO2srKyl7CiAgICAgICAgZm9yIChpbnQgdj0xOyB2PD1uOyB2KyspewogICAgICAgICAgICBpbnQgcCA9IHBhcmVudF9bay0xXVt2XTsKICAgICAgICAgICAgcGFyZW50X1trXVt2XSA9IHAgPyBwYXJlbnRfW2stMV1bcF0gOiAwOwogICAgICAgIH0KICAgIH0KCiAgICB2ZWN0b3I8UXVlcnk+IHFzKHEpOwogICAgZm9yIChpbnQgaT0wO2k8cTtpKyspewogICAgICAgIGludCBsLHI7IGNpbiA+PiBsID4+IHI7CiAgICAgICAgcXNbaV0ubCA9IGw7IHFzW2ldLnIgPSByOyBxc1tpXS5pZHggPSBpOwogICAgfQogICAgaW50IEJMT0NLID0gbWF4KDEsIChpbnQpc3FydChuKSk7CiAgICBmb3IgKGludCBpPTA7aTxxO2krKykgcXNbaV0uYmxvY2sgPSBxc1tpXS5sIC8gQkxPQ0s7CiAgICBzb3J0KHFzLmJlZ2luKCksIHFzLmVuZCgpLCBbJl0oY29uc3QgUXVlcnkgJmEsIGNvbnN0IFF1ZXJ5ICZiKXsKICAgICAgICBpZiAoYS5ibG9jayAhPSBiLmJsb2NrKSByZXR1cm4gYS5ibG9jayA8IGIuYmxvY2s7CiAgICAgICAgaWYgKGEuYmxvY2sgJiAxKSByZXR1cm4gYS5yID4gYi5yOwogICAgICAgIHJldHVybiBhLnIgPCBiLnI7CiAgICB9KTsKCiAgICBzZXQ8aW50LCBDbXA+IHN0OyAvLyBzdG9yZXMgbm9kZSBpZHMsIG9yZGVyZWQgYnkgdGluCiAgICBsbCBzdW0gPSAwOyAvLyBzdW0gb2YgcGFpcndpc2UgYWRqYWNlbnQgZGlzdGFuY2VzIGluIGN5Y2xpYyBvcmRlcgogICAgYXV0byBhZGRfbm9kZSA9IFsmXShpbnQgdil7CiAgICAgICAgaWYgKHN0LmVtcHR5KCkpewogICAgICAgICAgICBzdC5pbnNlcnQodik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYXV0byBpdCA9IHN0Lmxvd2VyX2JvdW5kKHYpOwogICAgICAgIGludCBzID0gKGl0ID09IHN0LmVuZCgpID8gKnN0LmJlZ2luKCkgOiAqaXQpOwogICAgICAgIGludCBwID0gKGl0ID09IHN0LmJlZ2luKCkgPyAqc3QucmJlZ2luKCkgOiAqcHJldihpdCkpOwogICAgICAgIHN1bSArPSAobGwpZGlzdChwLCB2KSArIGRpc3QodiwgcykgLSBkaXN0KHAsIHMpOwogICAgICAgIHN0Lmluc2VydChpdCwgdik7CiAgICB9OwogICAgYXV0byByZW1vdmVfbm9kZSA9IFsmXShpbnQgdil7CiAgICAgICAgaWYgKHN0LnNpemUoKSA9PSAxKXsKICAgICAgICAgICAgc3QuZXJhc2Uodik7CiAgICAgICAgICAgIHN1bSA9IDA7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYXV0byBpdCA9IHN0LmZpbmQodik7CiAgICAgICAgYXV0byBpdF9zID0gbmV4dChpdCk7CiAgICAgICAgaWYgKGl0X3MgPT0gc3QuZW5kKCkpIGl0X3MgPSBzdC5iZWdpbigpOwogICAgICAgIGludCBzID0gKml0X3M7CiAgICAgICAgaW50IHAgPSAoaXQgPT0gc3QuYmVnaW4oKSA/ICpzdC5yYmVnaW4oKSA6ICpwcmV2KGl0KSk7CiAgICAgICAgc3VtIC09IChsbClkaXN0KHAsIHYpICsgZGlzdCh2LCBzKSAtIGRpc3QocCwgcyk7CiAgICAgICAgc3QuZXJhc2UoaXQpOwogICAgfTsKCiAgICB2ZWN0b3I8bG9uZyBsb25nPiBhbnMocSk7CiAgICBpbnQgY3VyTCA9IDEsIGN1clIgPSAwOwogICAgZm9yIChhdXRvICZxdSA6IHFzKXsKICAgICAgICBpbnQgTCA9IHF1LmwsIFIgPSBxdS5yOwogICAgICAgIHdoaWxlIChjdXJMID4gTCkgeyBhZGRfbm9kZSgtLWN1ckwpOyB9CiAgICAgICAgd2hpbGUgKGN1clIgPCBSKSB7IGFkZF9ub2RlKCsrY3VyUik7IH0KICAgICAgICB3aGlsZSAoY3VyTCA8IEwpIHsgcmVtb3ZlX25vZGUoY3VyTCsrKTsgfQogICAgICAgIHdoaWxlIChjdXJSID4gUikgeyByZW1vdmVfbm9kZShjdXJSLS0pOyB9CiAgICAgICAgaWYgKHN0LmVtcHR5KCkpIGFuc1txdS5pZHhdID0gMDsKICAgICAgICBlbHNlIGFuc1txdS5pZHhdID0gc3VtLzIgKyAxOyAvLyBudW1iZXIgb2YgdmVydGljZXMgPSBlZGdlcyArIDEKICAgIH0KCiAgICBmb3IgKGludCBpPTA7aTxxO2krKykgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsKICAgIHJldHVybiAwOwp9Cg==