#include <bits/stdc++.h>
#define long long int
using namespace std;
struct node {
int b, e;
double s;
}dis[200005];
int n, m;
double ans;
int s, side;
int f[50005];
int spot_x[50005];
int spot_y[50005];
bool cmp(node a, node b) {
return a.s < b.s;
}
int find(int x) {
if (x == f[x]) return x;
return f[x] = find(f[x]);
}
void kruskal() {
for (int i = 1; i <= side; i ++) {
int x = find(dis[i].b);
int y = find(dis[i].e);
if (x == y) {
continue;
}
f[y] = x;
ans += dis[i].s;
s ++;
if (s == n - 1) {
break;
}
}
}
signed main () {
cin >> n >> m;
for (int i = 1 ;i <= n; i ++) {
f[i] = i;
}
for (int i = 1; i <= n; i ++) {
cin >> spot_x[i] >> spot_y[i];
}
for (int i = 1; i <= n; i ++) {
for (int j = i + 1; j <= n; j ++) {
double sum = sqrt(double((spot_x[i] - spot_x[j])) * double((spot_x[i] - spot_x[j])) + double((spot_y[i] - spot_y[j])) * double((spot_y[i] - spot_y[j])));
side ++;
dis[side].b = i, dis[side].e = j, dis[side].s = sum;
}
}
for (int i = 1; i <= m; i ++) {
int x, y;
cin >> x >> y;
side ++;
dis[side].b = x, dis[side].e = y, dis[side].s = 0;
}
sort(dis + 1, dis + side + 1, cmp);
kruskal();
printf("%.2lf\n", ans);
return 0;
}