#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10, MAXL = 22;
long long par[MAXN][MAXL], dpdown[MAXN], dpup[MAXN], cnt[MAXN], H[MAXN], n, m,
    v, u;
vector<int> adj_matrix[MAXN];
void makeHeight(int v, int p) {
  par[v][0] = p;
  H[v] = H[p] + 1;
  for (int u : adj_matrix[v]) {
    if (u == p) continue;
    makeHeight(u, v);
  }
}
void filldpup(int v, int p) {
  for (int u : adj_matrix[v]) {
    if (u == p) continue;
    filldpup(u, v);
  }
  for (int u : adj_matrix[v]) {
    if (u == p) continue;
    cnt[v] += cnt[u];
    dpdown[v] += (cnt[u] + dpdown[u]);
  }
}
int getH(int u, int h) {
  for (int i = 0; i < MAXL; i++)
    if ((h >> i) & 1) u = par[u][i];
  return u;
}
long double ANS(int v, int u) {
  if (H[u] > H[v]) swap(v, u);
  int t = getH(v, H[v] - H[u]);
  if (u == t) {
    int w = getH(v, H[v] - H[u] - 1);
    long long cntWP = (n - cnt[w]);
    long double ans = ((dpup[u] + dpdown[u] - dpdown[w] - cnt[w]) * cnt[v] +
                       cntWP * (cnt[v] * (H[v] - H[u] + 1) + dpdown[v]));
    ans /= (long double)(cntWP * cnt[v]);
    return ans;
  }
  int q = u;
  for (int k = MAXL - 1; k >= 0; k--) {
    if (par[q][k] != par[t][k]) {
      q = par[q][k];
      t = par[t][k];
    }
  }
  int lcaver = par[q][0];
  long long dis = H[v] + H[u] - (2 * H[lcaver]) + 1;
  long long cntVU = cnt[v] * cnt[u];
  long double ans = (dpdown[v] * cnt[u] + dpdown[u] * cnt[v] + cntVU * (dis));
  ans /= (long double)(cntVU);
  return ans;
}
void filldp2(int v, int p) {
  if (v != 1) dpup[v] = dpup[p] + n + dpdown[p] - dpdown[v] - (2 * cnt[v]);
  for (int u : adj_matrix[v]) {
    if (u == p) continue;
    filldp2(u, v);
  }
}
void initLCA() {
  for (int j = 1; j < MAXL; j++)
    for (int i = 1; i <= n; i++) par[i][j] = par[par[i][j - 1]][j - 1];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < MAXN; i++) cnt[i] = 1;
  for (int i = 0; i < n - 1; i++) {
    cin >> v >> u;
    adj_matrix[v].push_back(u);
    adj_matrix[u].push_back(v);
  }
  makeHeight(1, 1);
  initLCA();
  filldpup(1, 1);
  filldp2(1, 1);
  for (int i = 0; i < m; i++) {
    cin >> v >> u;
    cout << setprecision(10) << fixed << ANS(v, u) << endl;
  }
  return 0;
}
