#include<iostream> #include<stdio.h> using namespace std; const int MAX=2001; const int MAXINT=999999999; struct point { int x1,x2; int length; }sq[MAX]; int map[MAX][MAX]; int visit[MAX]; int dist[MAX]; int n,m; void Dijkstra() { for(int i=1;i<=n;i++) { visit[i]=0; dist[i]=map[1][i]; } visit[1]=1; int k,min; for(int i=1;i<n;i++) { min=MAXINT; for(int j=1;j<=n;j++) if(!visit[j]&&dist[j]<min) { min=dist[j]; k=j; } visit[k]=1; for(int j=1;j<=n;j++) if(!visit[j]&&dist[k]+map[k][j]<dist[j]) dist[j]=dist[k]+map[k][j]; } } int main() { int num; scanf("%d",&num); while(num--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d%d%d",&sq[i].x1,&sq[i].x2,&sq[i].length); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) map[i][j]=MAXINT; map[i][i]=0; } for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) if(sq[i].x2>=sq[j].x1&&sq[i].x2<=sq[j].x2) map[i][j]=sq[j].length; Dijkstra(); int T; for(int i=1;i<=m;i++) { scanf("%d",&T); if(dist[T]==MAXINT) printf("-1\n"); else printf("%d\n",sq[1].length+dist[T]); } } return 0; }