import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { private static int[] parent = new int[100001]; static class Edge { int a; int b; int w; public Edge(int a, int b, int w) { this.a = a; this.b = b; this.w = w; } } public static void init(int n) { for (int i = 1; i <= n; ++ i) { parent[i] = i; } } public static int find(int x) { if (parent[x] == x) { return x; } return parent[x] = find(parent[x]); } public static void merge(int a, int b) { int p1 = find(a); int p2 = find(b); if (p1 != p2) { parent[p1] = p2; } } public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); int m = in.nextInt(); Edge[] edges = new Edge[m]; for (int i = 0; i < m; ++ i) { int a = in.nextInt(); int b = in.nextInt(); int c = in.nextInt(); edges[i] = new Edge(a, b, c); } Arrays.sort(edges, new Comparator<Edge>() { @Override public int compare(Edge o1, Edge o2) { return o1.w - o2.w; } }); int res = 0; int cnt = 0; init(n); for (int i = 0; i < m; ++ i) { int a = edges[i].a; int b = edges[i].b; if (find(a) != find(b)) { { cnt ++; res += edges[i].w; merge(a, b); if (cnt == n - 1) { break; } } } if (cnt != n - 1) { System.out.println("impossible"); } else { System.out.println(res); } } } }