#include<bits/stdc++.h>
#define LL long long
using namespace std;

const int maxn=1e5+5;

LL ans,tot,n,m,a[maxn],fa[maxn],xo[maxn],b[maxn];
LL nx,uu,vv,w1,w2;
bool vis[maxn];

int getfather(int k)
{
	if(fa[k]==k)return k;
	return fa[k]=getfather(fa[k]);
}

int main()
{
	scanf("%lld%lld",&n,&m);
	for(int i=0;i<n;i++)scanf("%lld",&a[i]);
	for(int i=0;i<n;i++)
	{
		fa[i]=i;
		xo[i]=a[i];
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%lld%lld",&uu,&vv);
		w1=getfather(uu);
		w2=getfather(vv);
		if(w1==w2)continue;
		fa[w1]=w2;
		xo[w2]=min(xo[w1],xo[w2]);
	}
	
	for(int i=0;i<n;i++)if(fa[i]==i)
	{
		tot++;
		b[tot]=getfather(i);
		ans+=xo[b[tot]];
	}
	//for(int i=0;i<n;i++)cout<<getfather(i)<<" ";cout<<endl;
	//cout<<ans<<endl;
	if(tot*2-2>n)
	{
		printf("Impossible\n");
		return 0;
	}
	if(tot==1)
	{
		printf("0\n");
		return 0;
	}
	
	sort(b+1,b+tot+1);
	sort(a,a+n);
	nx=1;
	for(int i=0;i<n;i++)
	{
		if(a[i]==b[nx])vis[i]=true;
		if(a[i]>=b[nx])nx++;
	}
	//sort(a+1,a+n+1,cmp1);
	nx=1;
	if(tot>2)for(int i=0;i<n;i++)if(!vis[i])
	{
		ans+=a[i];
		nx++;
		if(nx>tot-2)break;
	}
	printf("%lld\n",ans);
	return 0;
}