#include <bits/stdc++.h>
const int maxn = 2E+5 + 5;
int n, m, ind;
int dp[maxn], dfn[maxn], Max[maxn];
std::vector<int> to[maxn], E[maxn];
struct Edge {
  int u, v, w;
} e[maxn];
namespace BIT {
int t[maxn];
inline int lowbit(int x) { return x & -x; }
inline void Add(int p, int v) {
  while (p <= n) t[p] += v, p += lowbit(p);
}
inline int Sum(int p, int r = 0) {
  while (p) r += t[p], p -= lowbit(p);
  return r;
}
}  // namespace BIT
int dep[maxn], jp[maxn][20];
inline int LCA(int u, int v) {
  if (dep[u] < dep[v]) std::swap(u, v);
  for (int i = 18; i >= 0; --i)
    if (dep[jp[u][i]] >= dep[v]) u = jp[u][i];
  if (u == v) return u;
  for (int i = 18; i >= 0; --i)
    if (jp[u][i] != jp[v][i]) u = jp[u][i], v = jp[v][i];
  return jp[u][0];
}
inline void DFS1(int u, int fa) {
  dfn[u] = ++ind, jp[u][0] = fa, dep[u] = dep[fa] + 1;
  for (int i = 1; i <= 18; ++i) jp[u][i] = jp[jp[u][i - 1]][i - 1];
  for (int v : to[u]) DFS1(v, u);
  Max[u] = ind;
}
inline void DFS2(int u, int fa) {
  int sum = 0;
  for (int v : to[u]) DFS2(v, u), sum += dp[v];
  dp[u] = sum;
  for (int ed : E[u])
    dp[u] = std::max(
        dp[u], BIT::Sum(dfn[e[ed].u]) + BIT::Sum(dfn[e[ed].v]) + sum + e[ed].w);
  BIT::Add(dfn[u], sum - dp[u]), BIT::Add(Max[u] + 1, dp[u] - sum);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 2, fa; i <= n; ++i) scanf("%d", &fa), to[fa].push_back(i);
  DFS1(1, 0);
  for (int i = 1; i <= m; ++i) {
    scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].w);
    E[LCA(e[i].u, e[i].v)].push_back(i);
  }
  DFS2(1, 0);
  printf("%d", dp[1]);
}
