#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
long long read() {
  long long x = 0, f = 1;
  char ch;
  while (!isdigit(ch = getchar())) (ch == '-') && (f = -f);
  for (x = ch ^ 48; isdigit(ch = getchar());
       x = (x << 3) + (x << 1) + (ch ^ 48))
    ;
  return x * f;
}
template <class T>
T Max(T a, T b) {
  return a > b ? a : b;
}
template <class T>
T Min(T a, T b) {
  return a < b ? a : b;
}
struct Edge {
  long long to;
  Edge *nxt;
  Edge(long long to, Edge *nxt) : to(to), nxt(nxt) {}
} * head[N];
void add(long long x, long long y) { head[x] = new Edge(y, head[x]); }
long long ggcd(long long x, long long y) { return y == 0 ? x : ggcd(y, x % y); }
long long n, m, dep[N], siz[N], sum[N], tot[N], fa[N][18];
void dfs1(long long x, long long f) {
  dep[x] = dep[fa[x][0] = f] + (siz[x] = 1);
  sum[x] = dep[x];
  for (long long i = 1; i <= 17; ++i) fa[x][i] = fa[fa[x][i - 1]][i - 1];
  for (Edge *i = head[x]; i; i = i->nxt) {
    if (i->to == f) continue;
    dfs1(i->to, x);
    siz[x] += siz[i->to];
    sum[x] += sum[i->to];
  }
}
void dfs2(long long x, long long f) {
  for (Edge *i = head[x]; i; i = i->nxt) {
    if (i->to == f) continue;
    tot[i->to] = tot[x] + sum[x] - sum[i->to];
    tot[i->to] -= 2 * (siz[x] - siz[i->to]) * dep[x];
    dfs2(i->to, x);
  }
}
long long up(long long x, long long y) {
  for (long long i = 0; i <= 17; ++i)
    if (y & (1 << i)) x = fa[x][i];
  return x;
}
long long Lca(long long x, long long y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (long long i = 17; ~i; --i)
    if (dep[fa[x][i]] >= dep[y]) x = fa[x][i];
  if (x == y) return x;
  for (long long i = 17; ~i; --i)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
signed main() {
  n = read();
  m = read();
  for (long long i = 1, x, y; i < n; ++i)
    x = read(), y = read(), add(x, y), add(y, x);
  dfs1(1, 0);
  dfs2(1, 0);
  for (long long i = 1, x, y, lca, son, ans, all, siz1, siz2; i <= m; ++i) {
    x = read();
    y = read();
    if (dep[x] > dep[y]) swap(x, y);
    lca = Lca(x, y);
    if (lca == x) {
      son = up(y, dep[y] - dep[x] - 1);
      siz1 = siz[y];
      siz2 = siz[1] - siz[son];
      all = siz1 * siz2;
      ans = 0;
      ans += (sum[y] - dep[y] * siz1) * siz2;
      ans += (tot[son] + siz2 * dep[x]) * siz1;
      ans += all * (dep[y] - dep[x] + 1);
    } else {
      all = siz[x] * siz[y];
      ans = 0;
      ans += siz[x] * (sum[y] - dep[y] * siz[y]);
      ans += siz[y] * (sum[x] - dep[x] * siz[x]);
      ans += all * (dep[x] + dep[y] - 2 * dep[lca] + 1);
    }
    printf("%.7f\n", 1.0 * ans / all);
  }
  return 0;
}
