You are given a forest with N vertices and M edges. The vertices are numbered 0 through N-1. The edges are given in the format (x_i,y_i), which means that Vertex x_i and y_i are connected by an edge.

Each vertex i has a value a_i. You want to add edges in the given forest so that the forest becomes connected. To add an edge, you choose two different vertices i and j, then span an edge between i and j. This operation costs a_i + a_j dollars, and afterward neither Vertex i nor j can be selected again.

Find the minimum total cost required to make the forest connected, or print `Impossible` if it is impossible.

Constraints

* 1 ≤ N ≤ 100,000
* 0 ≤ M ≤ N-1
* 1 ≤ a_i ≤ 10^9
* 0 ≤ x_i,y_i ≤ N-1
* The given graph is a forest.
* All input values are integers.

Input

Input is given from Standard Input in the following format:


N M
a_0 a_1 .. a_{N-1}
x_1 y_1
x_2 y_2
:
x_M y_M


Output

Print the minimum total cost required to make the forest connected, or print `Impossible` if it is impossible.

Examples

Input

7 5
1 2 3 4 5 6 7
3 0
4 0
1 2
1 3
5 6


Output

7


Input

5 0
3 1 4 1 5


Output

Impossible


Input

1 0
5


Output

0
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
const int N=100010;
map <int,int> w;
int fa[N],a[N],s[N],v[N],st[N];
inline int gi() {
    int x=0,o=1;
    char ch=getchar();
    while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
inline int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
int main() {
    int n,m,tp=0;
    long long sum=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++) fa[i]=i,a[i]=gi(),s[i]=1<<30;
    for(int i=1;i<=m;i++) {
	int x=gi()+1,y=gi()+1;
	fa[find(x)]=find(y);
    }
    for(int i=1;i<=n;i++) {
	int x=find(i);
	if(i==x) v[++tp]=i;
	st[i]=a[i],s[x]=min(s[x],a[i]);
    }
    if(tp==1) return puts("0"),0;
    for(int i=1;i<=tp;i++) sum+=s[v[i]],++w[s[v[i]]];
    sort(st+1,st+1+n);
    for(int i=1,j=1;i<tp-1;i++,j++) {
	while(j<=n&&w[st[j]]) --w[st[j]],++j;
	if(j>n) return puts("Impossible"),0;
	sum+=st[j];
    }
    cout<<sum;
    return 0;
}