#include <bits/stdc++.h>
using namespace std;
bool f1;
int hd[100005], nxt[100005 + 100005], to[100005 + 100005], cnte;
void addedge(int a, int b) {
  nxt[++cnte] = hd[a];
  to[cnte] = b;
  hd[a] = cnte;
}
int n, m;
int L[100005], R[100005], tot, id[100005];
int fa[100005][20], dep[100005];
long long dis1[100005], dis2[100005];
void dfs(int x, int f) {
  L[x] = ++tot;
  dep[x] = dep[f] + 1;
  id[tot] = x;
  fa[x][0] = f;
  for (register int i = 1; i <= 17; i++) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (register int i = hd[x]; i; i = nxt[i]) {
    int y = to[i];
    if (y == f) continue;
    dfs(y, x);
  }
  R[x] = tot;
}
int LCA(int a, int b) {
  if (dep[a] < dep[b]) swap(a, b);
  int tmp = dep[a] - dep[b];
  for (register int i = 0; (1 << i) <= tmp; i++)
    if ((1 << i) & tmp) a = fa[a][i];
  if (a == b) return a;
  for (register int i = 17; i >= 0; i--)
    if (fa[a][i] != fa[b][i]) {
      a = fa[a][i];
      b = fa[b][i];
    }
  return fa[a][0];
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long C[100005];
void ADD(int x, long long a) {
  while (x <= n) {
    C[x] += a;
    x += x & -x;
  }
}
long long SUM(int x) {
  long long res = 0;
  while (x) {
    res += C[x];
    x -= x & -x;
  }
  return res;
}
void solve() {
  dfs(1, 0);
  for (int k = 1; k <= n; k++) {
    int i = id[k];
    ADD(L[i], dep[i]);
    dis1[i] = dis1[fa[i][0]] + dep[i] * (R[i] - L[i] + 1);
    dis2[i] = dis2[fa[i][0]] + dep[fa[i][0]] * (R[i] - L[i] + 1);
  }
  while (m--) {
    int a, b;
    scanf("%d%d", &a, &b);
    int lca = LCA(a, b);
    if (lca == a || lca == b) {
      if (L[a] > L[b]) swap(a, b);
      int x = b;
      for (register int i = 17; i >= 0; i--)
        if (L[fa[x][i]] > L[a]) x = fa[x][i];
      long long sumlca = dis1[a] - dis2[x],
                suma = SUM(n) - (SUM(R[x]) - SUM(L[x] - 1)),
                sumb = SUM(R[b]) - SUM(L[b] - 1);
      long long sza = n - (R[x] - L[x] + 1), szb = R[b] - L[b] + 1;
      long long fz = suma * szb + sumb * sza - 2 * sumlca * szb + sza * szb,
                fm = sza * szb;
      long long k = gcd(fz, fm);
      printf("%lf\n", 1. * fz / fm);
    } else {
      long long suma = SUM(R[a]) - SUM(L[a] - 1),
                sumb = SUM(R[b]) - SUM(L[b] - 1);
      long long sza = R[a] - L[a] + 1, szb = R[b] - L[b] + 1;
      long long fz = (-2 * dep[lca] + 1) * sza * szb + suma * szb + sumb * sza,
                fm = sza * szb;
      long long k = gcd(fz, fm);
      printf("%lf\n", 1. * fz / fm);
    }
  }
}
bool f2;
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    addedge(a, b);
    addedge(b, a);
  }
  solve();
  return 0;
}
