#include<bits/stdc++.h>
using namespace std;
//输入n,m,a,b
//在输入花费的时候 把a换成b的花费存入c[a][b]中
//循环每个宝石
//如果宝石一样就退出循环
//如果能把a换成b x=a换成b的花费
//如果能把b换成a x=b换成a的花费
//如果两个都可以 求最小值
//如果两个不都可以 退出循环
int n,m,ans;
int a[10004],b[10004],c[401][401];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
cin>>b[i];
}
//输入n,m,a,b
int x,y,z;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
if(c[x][y]==0) c[x][y]=z;//在输入花费的时候 把a换成b的花费存入c[a][b]中
else c[x][y]=min(c[x][y],z);
}
for(int i=1;i<=n;i++){//循环每个宝石
if(a[i]==b[i]) continue;//如果宝石一样就退出循环
if(c[a[i]][b[i]]) x=c[a[i]][b[i]];//如果能把a换成b x=a换成b的花费
else x=INT_MAX;
if(c[b[i]][a[i]]) y=c[b[i]][a[i]];//如果能把b换成a x=b换成a的花费
else y=INT_MAX;
if(x==INT_MAX&&y==INT_MAX){//如果两个不都可以 退出循环
cout<<-1;
return 0;
}
else ans+=min(x,y);//如果两个都可以 求最小值
}
cout<<ans;
}
/**************************************************************
Problem: 2355
User: wuyunfeng
Language: C++
Result: Wrong Answer
****************************************************************/