#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T read(register T& t) {
  register T f = 1;
  register char ch = getchar();
  t = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -f;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') t = t * 10 + ch - '0', ch = getchar();
  t *= f;
  return t;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
int head[100005], to[200005], ne[200005], total = 1;
inline void add(int a, int b) {
  total++;
  to[total] = b;
  ne[total] = head[a];
  head[a] = total;
}
int n, m;
long long deep[100005];
long long size[100005];
int fa[100005], son[100005];
int top[100005];
void dfs1(int now) {
  deep[now] = deep[fa[now]] + 1;
  size[now] = 1;
  for (int i = head[now]; i; i = ne[i])
    if (to[i] != fa[now]) {
      fa[to[i]] = now;
      dfs1(to[i]);
      size[now] += size[to[i]];
      if (size[to[i]] > size[son[now]]) son[now] = to[i];
    }
}
void dfs2(int now, int topf) {
  top[now] = topf;
  if (son[now]) dfs2(son[now], topf);
  for (int i = head[now]; i; i = ne[i])
    if (to[i] != fa[now] && to[i] != son[now]) dfs2(to[i], to[i]);
}
inline int lca(int x, int y) {
  while (top[x] != top[y]) {
    if (deep[top[x]] < deep[top[y]])
      y = fa[top[y]];
    else
      x = fa[top[x]];
  }
  if (deep[x] < deep[y]) return x;
  return y;
}
long long f[100005], F[100005];
void dfs3(int now, int fa) {
  for (int i = head[now]; i; i = ne[i])
    if (to[i] != fa) {
      dfs3(to[i], now);
      f[now] += f[to[i]] + size[to[i]];
    }
}
void dfs4(int now, int fa) {
  if (now == 1)
    F[now] = f[now];
  else {
    long long left = F[fa] - f[now] - size[now];
    F[now] = (f[now] + left + (n - size[now]));
  }
  for (int i = head[now]; i; i = ne[i])
    if (to[i] != fa) dfs4(to[i], now);
}
int main() {
  read(n, m);
  for (int i = 1, x, y; i < n; i++) read(x, y), add(x, y), add(y, x);
  dfs1(1);
  dfs2(1, 1);
  dfs3(1, 1);
  dfs4(1, 1);
  while (m--) {
    int a, b;
    read(a, b);
    if (a == b) {
      printf("0.00000000\n");
      continue;
    }
    int lc = lca(a, b);
    if (lc == a || lc == b) {
      if (lc == a)
        a = lc, b = b;
      else
        b = a, a = lc;
      int id = b;
      while (top[id] != top[a]) {
        id = top[id];
        if (fa[id] == a) break;
        if (top[id] == top[a]) {
          id = son[a];
          break;
        }
        id = fa[id];
      }
      if (top[id] == top[a]) id = son[a];
      if (fa[id] != a) fprintf(stderr, "err\n");
      long long dis = deep[b] - deep[a];
      long long sum = size[id] - size[b];
      long long sb = size[b];
      long long sa = n - sb - sum;
      long long fb = f[b];
      long long fa = F[a] - f[id] - size[id];
      printf("%.8lf\n",
             1.0 * ((dis + 1) * sa * sb + sb * fa + sa * fb) / sa / sb);
    } else {
      long long dis = deep[a] + deep[b] - deep[lc] * 2;
      printf("%.8lf\n", 1.0 *
                            ((dis + 1) * size[a] * size[b] + size[a] * f[b] +
                             size[b] * f[a]) /
                            size[a] / size[b]);
    }
  }
}
