#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 200009;
bool was[N];
int n, k, res, sz[N], can[N * 5];
vector < array < int , 2 > > g[N];
void sizes(int v, int p) {
sz[v] = 1;
for (auto to : g[v]) if (!was[to[0]] && to[0] != p) {
sizes(to[0], v);
sz[v] += sz[to[0]];
}
}
int get(int v, int p, int m) {
for (auto to : g[v]) if (!was[to[0]] && to[0] != p && sz[to[0]] * 2 > m) return get(to[0], v, m);
return v;
}
void dfs(int v, int p, int len, int d) {
if (len > k) return;
res = min(res, d + can[k - len]);
for (auto to : g[v]) if (!was[to[0]] && to[0] != p) dfs(to[0], v, len + to[1], d + 1);
}
void add(int v, int p, int len, int d, bool e = 0) {
if (len > k) return;
if (!e) can[len] = min(can[len], d); else can[len] = (int)1e9;
for (auto to : g[v]) if (!was[to[0]] && to[0] != p) add(to[0], v, len + to[1], d + 1, e);
}
void go(int v) {
sizes(v, v);
int c = get(v, v, sz[v]);
was[c] = 1;
can[0] = 0;
cout << "! " << c << "\n";
for (auto to : g[c]) {
dfs(to[0], c, to[1], 1);
add(to[0], c, to[1], 1);
}
for (auto to : g[c]) add(to[0], c, to[1], 1, 1);
for (auto to : g[c]) if (!was[to[0]]) go(to[0]);
}
int best_path(int n_, int k_, int h[][2], int a_[]) {
n = n_, k = k_;
for (int i = 0; i < n - 1; i++) {
g[h[i][0]].push_back({h[i][1], a_[i]});
g[h[i][1]].push_back({h[i][0], a_[i]});
}
for (int i = 0; i <= k; i++) can[i] = (int)1e9;
res = (int)1e9;
go(0);
return (res < (int)1e9 ? res : -1);
}
/*int main() {
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> k;
int h[100][2], a[100];
for (int i = 0; i < n - 1; i++) cin >> h[i][0] >> h[i][1] >> a[i];
cout << best_path(n, k, h, a);
}*/