# Algorithm for finding minimum spanning tree
"""
Step:
1. Sort the wieghts of the edges in ascending order
2. Check each cycle if cycle occurs when an each edge is added.
  a) If no cycle, add to the MST
  b) Yes cycle, do not add to MST
3. Repeat # 2 for all edges
"""

# Code
def find_parent(parent, x):
  if parent[x]!=x:
    parent[x] = find_parent(parent, parent[x])
  return parent[x]

def union_parent(parent, a , b):
  a = find_parent(parent, a)
  b = find_parent(parent, b)
  if a < b:
    parent[b] = a
  else:
    parent[a] = b

v,e = map(int, input().split())
parent = [0] * (v+1)

edges = []
result = 0

for i in range(1, v+1):
  parent[i] = i

for _ in range(e):
  a, b, cost = map(int, input().split())
  edges.append((cost, a, b))

edges.sort()

for edge in edges:
  cost, a, b = edge
  if find_parent(parent,a) != find_parent(parent, b):
    union_parent(parent, a, b)
    result += cost

print(result)

#Run Time: O(ElogE)
