#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5, Log = 18;
int n, m, h[N], nxt[N], f[N], g[N], fa[N], s[N], E[N][3], F[N][Log], dep[N],
    D[N];
vector<int> q[N];
char c;
int read() {
  int x = 0, sig = 1;
  for (c = getchar(); c < '0' || c > '9'; c = getchar())
    if (c == '-') sig = -1;
  for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
  return x * sig;
}
int lca(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = Log - 1; i >= 0; i--)
    if (dep[F[x][i]] >= dep[y]) x = F[x][i];
  if (x == y) return x;
  for (int i = Log - 1; i >= 0; i--)
    if (F[x][i] != F[y][i]) {
      x = F[x][i];
      y = F[y][i];
    }
  return F[x][0];
}
int Get(int x) {
  for (D[m = 1] = x; fa[x] > 0; D[++m] = x = fa[x])
    ;
  for (int i = m - 1; i; i--) {
    fa[D[i]] = D[m];
    g[D[i]] += g[D[i + 1]];
  }
  return D[m];
}
int main() {
  n = read();
  m = read();
  dep[1] = 1;
  for (int i = 2; i <= n; i++) {
    F[i][0] = read();
    nxt[i] = h[F[i][0]];
    h[F[i][0]] = i;
    dep[i] = dep[F[i][0]] + 1;
  }
  for (int j = 1; j < Log; j++) {
    for (int i = 1; i <= n; i++) F[i][j] = F[F[i][j - 1]][j - 1];
  }
  for (int i = 1; i <= m; i++) {
    E[i][0] = read();
    E[i][1] = read();
    E[i][2] = read();
    q[lca(E[i][0], E[i][1])].push_back(i);
  }
  vector<int>::iterator it;
  for (int i = n, j, k, x, y; i; i--) {
    for (it = q[i].begin(); it != q[i].end(); it++) {
      k = *it;
      x = Get(E[k][0]);
      y = Get(E[k][1]);
      if (x == i)
        f[i] = max(f[i], -f[y] + s[E[k][1]] + g[E[k][1]] + E[k][2]);
      else if (y == i)
        f[i] = max(f[i], -f[x] + s[E[k][0]] + g[E[k][0]] + E[k][2]);
      else
        f[i] = max(f[i], -f[x] - f[y] + s[E[k][0]] + s[E[k][1]] + g[E[k][0]] +
                             g[E[k][1]] + E[k][2]);
    }
    for (j = h[i]; j; j = nxt[j]) {
      s[i] += f[j];
      fa[j] = i;
    }
    f[i] += s[i];
    for (j = h[i]; j; j = nxt[j]) g[j] += s[i] - f[j];
  }
  printf("%d\n", f[1]);
  return 0;
}
