#include <bits/stdc++.h>
using namespace std;
const long long N = 2e5 + 10;
struct Node {
  long long y, Next;
} e[2 * N];
long long len = 0, linkk[N];
long long n, Q;
double Ans = 0;
void Insert(long long x, long long y) {
  e[++len].Next = linkk[x];
  linkk[x] = len;
  e[len].y = y;
}
long long d[N], s[N], siz[N], fa[N][30];
void dfs(long long x, long long dd, long long faa) {
  d[x] = dd;
  fa[x][0] = faa;
  siz[x] = 1;
  for (long long i = linkk[x]; i; i = e[i].Next) {
    long long y = e[i].y;
    if (y == faa) continue;
    dfs(y, dd + 1, x);
    siz[x] += siz[y];
    s[x] += s[y] + siz[y];
  }
}
void find_fa() {
  for (long long i = 1; i < 30; i++)
    for (long long j = 1; j <= n; j++)
      if (fa[j][i - 1] == -1)
        fa[j][i] = -1;
      else
        fa[j][i] = fa[fa[j][i - 1]][i - 1];
}
long long Lca(long long x, long long y) {
  if (d[x] < d[y]) swap(x, y);
  for (long long dd = d[x] - d[y], i = 0; dd; dd >>= 1, i++)
    if (dd & 1) x = fa[x][i];
  if (x == y) return x;
  for (long long i = 29; i >= 0; i--)
    if (fa[x][i] != fa[y][i]) x = fa[x][i], y = fa[y][i];
  return fa[x][0];
}
long long D(long long x, long long y) { return d[x] + d[y] - 2 * d[Lca(x, y)]; }
long long gcd(long long x, long long y) { return y == 0 ? x : gcd(y, x % y); }
void work1(long long x, long long y) {
  long long tot = (siz[x]) * (siz[y]);
  long long Sum = tot * (D(x, y) + 1) + siz[y] * s[x] + siz[x] * s[y];
  Ans = Sum * 1.0 / tot * 1.0;
  printf("%.8lf\n", Ans);
}
long long find(long long x, long long y) {
  for (long long dd = d[y] - d[x] - 1, i = 0; dd; dd >>= 1, i++)
    if (dd & 1) y = fa[y][i];
  return y;
}
long long g[N];
void work2(long long x, long long y) {
  long long c = find(x, y);
  long long tot = siz[y] * (n - siz[c]);
  long long Sum = tot * (D(x, y) + 1) + (siz[y] * (g[x] - s[c] - siz[c])) +
                  s[y] * (n - siz[c]);
  Ans = Sum * 1.0 / tot * 1.0;
  printf("%.8lf\n", Ans);
}
void dfss(long long x, long long faa) {
  for (long long i = linkk[x]; i; i = e[i].Next) {
    long long y = e[i].y;
    if (y == faa) continue;
    g[y] = g[x] - siz[y] + (n - siz[y]);
    dfss(y, x);
  }
}
signed main() {
  scanf("%lld %lld", &n, &Q);
  for (long long i = 1, x, y; i < n; i++)
    scanf("%lld %lld", &x, &y), Insert(x, y), Insert(y, x);
  dfs(1, 0, -1);
  find_fa();
  g[1] = s[1];
  dfss(1, 0);
  for (long long i = 1; i <= Q; i++) {
    long long a, b;
    scanf("%lld %lld", &a, &b);
    if (d[a] > d[b]) swap(a, b);
    long long A = Lca(a, b);
    if (A != a)
      work1(a, b);
    else
      work2(a, b);
  }
  return 0;
}
