#include <bits/stdc++.h>
using namespace std;
int n, m;
long long gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
int h[100005], tot = 0;
struct edge {
  int nxt, to;
} G[100005 << 1];
void Add(int a, int b) {
  G[++tot] = (edge){h[a], b};
  h[a] = tot;
}
long long sz[100005], dep[100005], dis[100005];
long long dis2[100005];
int fa[100005][20];
void dfs(int x, int f, int d) {
  dis[x] = 0;
  fa[x][0] = f;
  sz[x] = 1;
  dep[x] = d;
  for (int i = h[x]; i; i = G[i].nxt) {
    int u = G[i].to;
    if (u == f) continue;
    dfs(u, x, d + 1);
    sz[x] += sz[u];
    dis[x] += sz[u] + dis[u];
  }
}
void Init() {
  for (int j = 1; j <= 19; j++)
    for (int i = 1; i <= n; i++) fa[i][j] = fa[fa[i][j - 1]][j - 1];
}
void up(int &x, int step) {
  for (int i = 19; i >= 0; i--)
    if (step & 1 << i) x = fa[x][i];
}
int LCA(int a, int b) {
  if (dep[a] > dep[b]) swap(a, b);
  int step = dep[b] - dep[a];
  for (int i = 19; i >= 0; i--)
    if (step & 1 << i) b = fa[b][i];
  if (a == b) return b;
  for (int i = 19; i >= 0; i--)
    if (fa[a][i] != fa[b][i]) a = fa[a][i], b = fa[b][i];
  return fa[a][0];
}
void re_dfs(int x, int f) {
  dis2[x] = dis2[f] - 2 * sz[x] + sz[1];
  for (int i = h[x]; i; i = G[i].nxt) {
    int u = G[i].to;
    if (u == f) continue;
    re_dfs(u, x);
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, a, b; i < n; i++) {
    scanf("%d%d", &a, &b);
    Add(a, b);
    Add(b, a);
  }
  dfs(1, 0, 0);
  dis2[0] = dis[1] + sz[1];
  re_dfs(1, 0);
  Init();
  for (int i = 1, a, b; i <= m; i++) {
    scanf("%d%d", &a, &b);
    int lca = LCA(a, b);
    if (lca != a && lca != b) {
      long long tt = sz[a] * sz[b];
      long long ds = dep[a] + dep[b] - 2 * dep[lca];
      long long ans = ds * tt + dis[a] * sz[b] + dis[b] * sz[a] + tt;
      long long g = gcd(ans, tt);
      double AS = 1.0 * ans / tt;
      printf("%.8lf\n", AS);
    } else {
      if (lca == b) swap(a, b);
      int k = b;
      up(k, dep[b] - dep[a] - 1);
      long long ds1 = dis2[a] - dis[k] - sz[k];
      long long ds2 = dis[b];
      long long ds = dep[b] - dep[a];
      long long sz1 = sz[1] - sz[k];
      long long sz2 = sz[b];
      long long tt = sz1 * sz2;
      long long ans = ds * tt + ds1 * sz2 + ds2 * sz1 + tt;
      long long g = gcd(ans, tt);
      double AS = 1.0 * ans / tt;
      printf("%.8lf\n", AS);
    }
  }
  return 0;
}
