#include <bits/stdc++.h>
using namespace std;
int N, M, cur;
int in[100005], out[100005], lvl[100005], par[20][100005];
long long subSize[100005], subSum[100005], parSum[100005];
vector<int> adj[100005];
void dfs1(int nd, int l) {
  in[nd] = ++cur;
  subSize[nd] = 1;
  lvl[nd] = l;
  for (int i = 0; i < (int)adj[nd].size(); i++) {
    int ch = adj[nd][i];
    if (ch == par[0][nd]) continue;
    par[0][ch] = nd;
    dfs1(ch, l + 1);
    subSum[nd] += subSum[ch] + subSize[ch];
    subSize[nd] += subSize[ch];
  }
  out[nd] = ++cur;
}
void dfs2(int nd, long long d) {
  parSum[nd] = d;
  for (int i = 0; i < (int)adj[nd].size(); i++) {
    int ch = adj[nd][i];
    if (ch == par[0][nd]) continue;
    dfs2(ch, parSum[nd] + subSum[nd] - subSum[ch] - 2 * subSize[ch] + N);
  }
}
void precalc() {
  for (int i = 1; i < (int)20; i++)
    for (int nd = 1; nd < (int)N + 1; nd++)
      par[i][nd] = par[i - 1][par[i - 1][nd]];
}
int Lca(int u, int v) {
  if ((in[u] <= in[v] && out[u] >= out[v])) return u;
  for (int i = 19; i >= 0; i--)
    if (!(in[par[i][u]] <= in[v] && out[par[i][u]] >= out[v])) u = par[i][u];
  return par[0][u];
}
int go(int u, int d) {
  for (int i = 19; i >= 0; i--)
    if ((1 << i) <= d) {
      d -= (1 << i);
      u = par[i][u];
    }
  return u;
}
double solve(int u, int v) {
  long long sum = 0, way = 1;
  int lca = Lca(u, v), dist = lvl[u] + lvl[v] - 2 * lvl[lca];
  if (lvl[u] > lvl[v]) swap(u, v);
  if (lca != u) {
    sum = subSize[v] * subSum[u] + subSize[u] * subSum[v];
    way = subSize[u] * subSize[v];
  } else {
    int dth = go(v, dist - 1);
    long long t = parSum[dth] + subSize[dth] - N;
    sum = subSize[v] * t + (N - subSize[dth]) * subSum[v];
    way = (N - subSize[dth]) * subSize[v];
  }
  sum += way * (dist + 1);
  return double(sum) / double(way);
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 0; i < (int)N - 1; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  par[0][1] = 1;
  dfs1(1, 0);
  dfs2(1, 0);
  precalc();
  while (M--) {
    int u, v;
    scanf("%d%d", &u, &v);
    printf("%.8lf\n", solve(u, v));
  }
  return 0;
}
