#include <stdio.h>
#include <stdlib.h>
#define E_MAX 100000
#define V_MAX 10001

typedef struct edge {
    int s, t, w;
} edge;

edge edges[E_MAX];
int x[V_MAX];

int compare(const void *a, const void *b) {
    return (*(edge *)a).w - (*(edge *)b).w;
}

void initx(int n) {
    for(int i=0; i<n; i++) x[i] = i;
}

void unite(int a, int b) {
    x[x[b]] = x[a];
}

int find(int a) {
    if (x[a] == a) return a;
    else return x[a] = find(x[a]);
}

int same(int a, int b) {
    return find(a) == find(b);
}

int main() {
    int n, m, cnt = 0;
    scanf("%d%d", &n, &m);
    initx(n);
    for(int i=0; i<m; i++)
        scanf("%d%d%d", &edges[i].s, &edges[i].t, &edges[i].w);

    qsort(edges, m, sizeof(edge), compare);

    for(int i=0; i<m; i++) {
        edge e = edges[i];
        if (!same(e.s, e.t)) {
            unite(e.s, e.t);
            cnt += e.w;
        }
    }
    printf("%d\n", cnt);
}

