[CodeForces1000]G. Two-Paths

作为压轴题,题目描述很长、很难理解。

还没写好 QwQ

G. Two-Paths

time limit per test: 3.5 seconds
memory limit per test: 256 megabytes
input: standard input
output: standard output

You are given a weighted tree (undirected connected graph with no cycles, loops or multiple edges) with n vertices. The edge {uj,vj} has weight wj. Also each vertex i has its own value ai assigned to it.

Let’s call a path starting in vertex u and ending in vertex v, where each edge can appear no more than twice (regardless of direction), a 2-path. Vertices can appear in the 2-path multiple times (even start and end vertices).

For some 2-path p profit Pr(p)=∑v∈distinct vertices in pav−∑e∈distinct edges in pke⋅we, where ke is the number of times edge e appears in p. That is, vertices are counted once, but edges are counted the number of times they appear in p.

You are about to answer m queries. Each query is a pair of vertices (qu,qv). For each query find 2-path p from qu to qv with maximal profit Pr(p).

Input

The first line contains two integers n and q (2≤n≤3⋅105, 1≤q≤4⋅105) — the number of vertices in the tree and the number of queries.

The second line contains n space-separated integers a1,a2,…,an (1≤ai≤109) — the values of the vertices.

Next n−1 lines contain descriptions of edges: each line contains three space separated integers ui, vi and wi (1≤ui,vi≤n, ui≠vi, 1≤wi≤109) — there is edge {ui,vi} with weight wi in the tree.

Next q lines contain queries (one per line). Each query contains two integers qui and qvi (1≤qui,qvi≤n) — endpoints of the 2-path you need to find.

Output

For each query print one integer per line — maximal profit Pr(p) of the some 2-path p with the corresponding endpoints.

Example

input

7 6
6 5 5 3 2 1 2
1 2 2
2 3 2
2 4 1
4 5 1
6 4 2
7 3 25
1 1
4 4
5 6
6 4
3 4
3 7

output

9
9
9
8
12
-14

Note

Explanation of queries:

(1,1) — one of the optimal 2-paths is the following: 1→2→4→5→4→2→3→2→1. Pr(p)=(a1+a2+a3+a4+a5)−(2⋅w(1,2)+2⋅w(2,3)+2⋅w(2,4)+2⋅w(4,5))=21−2⋅12=9.

(4,4): 4→2→1→2→3→2→4. Pr(p)=(a1+a2+a3+a4)−2⋅(w(1,2)+w(2,3)+w(2,4))=19−2⋅10=9.

(5,6): 5→4→2→3→2→1→2→4→6.

(6,4): 6→4→2→1→2→3→2→4.

(3,4): 3→2→1→2→4.

(3,7): 3→2→1→2→4→5→4→2→3→7.

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main(void)
{
printf("还没写好 QwQ\n");
return 0;
}