#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
****************************************************************/