#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;

const int maxn = 1e4+7;
typedef long long LL;
struct Eg{
    int u,v;
    LL c;
}E[maxn*100];

int par[maxn];
int rk[maxn];
void init(int n){
    int len=min(n,maxn);
    for(int i=0;i<len;i++){
        par[i]=i;
        rk[i]=0;
    }
}
int fd(int x){
    if(x==par[x]) return x;
    return par[x]=fd(par[x]);
}

void mg(int x,int y){
    x=fd(x);
    y=fd(y);
    if(x==y) return ;
    if(rk[x]<rk[y]){
        par[x]=y;
    }else {
        par[y]=x;
        if(rk[x]==rk[y]) rk[x]++;
    }
}
bool same(int x,int y){
    return fd(x)==fd(y);
}
bool cmp(Eg e1,Eg e2){
    return e1.c>e2.c;
}
int X[maxn];
int Y[maxn];

int N,M;
bool vis[maxn*100];
int main(){

    scanf("%d%d",&N,&M);
    for(int i=1;i<=N;i++){
        scanf("%d%d",X+i,Y+i);
    }

    int u,v;
    for(int i=1;i<=M;i++){
        scanf("%d%d",&u,&v);
        LL dis=((LL)X[u]-X[v])*(X[u]-X[v])+((LL)Y[u]-Y[v])*(Y[u]-Y[v]);
        E[i].u=u;
        E[i].v=v;
        E[i].c=dis;
    }
    init(N+3);
    sort(E+1,E+M+1,cmp);
    int res=0;
    for(int i=1;i<=M;i++){
        Eg e=E[i];
        if(!same(e.u,e.v)){
            mg(e.u,e.v);
            vis[i]=1;
        }
    }
    double ans=0;
    for(int i=1;i<=M;i++){
        if(!vis[i]){
            ans+=(sqrt(1.0*E[i].c));
        }
    }
    printf("%.4f\n",ans);
return 0;
}


