import java.util.*;
public class Main {
public static int[] father;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
father = new int[n+1];
for(int i = 1;i <= n;i){
father[i] = i;
}
LinkedList[HTML_REMOVED] p = new LinkedList<>();
while(m > 0){
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
p.add(new Node(a,b,c));
m–;
}
Collections.sort(p, new Comparator[HTML_REMOVED]() {
@Override
public int compare(Node o1, Node o2) {
return o1.c - o2.c;
}
});
int count = 0;
int sum = 0;
for(int i = 0;i < p.size();i){
Node s = p.get(i);
if(findfather(s.a) != findfather(s.b)){
union(s.a,s.b);
count++;
sum += s.c;
}
if(count == n-1){
break;
}
}
System.out.println(sum);
}
private static void union(int a, int b) {
a = findfather(a);
b = findfather(b);
if(a != b){
father[b] = a;
}
}
private static int findfather(int a) {
if(father[a] == a){
return a;
}
return findfather(father[a]);
}
}
class Node{
public int a;
public int b;
public int c;
public Node(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Node node = (Node) o;
return a == node.a && b == node.b && c == node.c;
}
@Override
public int hashCode() {
return Objects.hash(a, b, c);
}
}