神木·溯源
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

【题目背景】
\hspace{15pt}MuQ 成功地翻阅完雪山后,历经几周的长途跋涉,最终来到了了 CAPOO 星球最荒凉的边界。而边界的中间矗立着一棵巨树。这棵树是守护 CAPOO 星球的世界树。
\hspace{15pt}走投无路的 MuQ 无奈,只能在世界树下祈祷。
\hspace{15pt}忽然,一阵微风拂过他的耳畔,树影间传来一声几不可闻的叹息:
\hspace{15pt}“_我可以帮你扭转历史……但在此之前,你必须解开我的记忆_。”
\hspace{15pt}MuQ 一震。原来,历史可以被改变!
\hspace{15pt}微风化作絮语,世界树的低吟在他脑海中展开一幅浩瀚的画卷……
\hspace{15pt}世界树是一棵有 n 个结点,n-1 条边的树。每个点上都有一个权值。第 i 个点的权值为 a_i
\hspace{15pt}自公元元年起,世界树便开始吸收大地的养分。这会导致某个点的权值会遭遇变动,然后还原。根据世界树的回忆,这样的变动一共存在了 q 次(即 q 次变动是独立的)。每次变动结束后,结点的权值会还原至原始值,每次变动互不影响。
\hspace{15pt}世界树的能力值是它的最大非空子树和。世界树想知道,对于每次变动,它的能力值是多少?

【名词解释】
\hspace{15pt}非空子树和:选择一个非空的点集 S,使得原树的导出子图 G(S) 也是一棵树。定义此时的非空子树和为 \sum_{i\in S} a_i
\hspace{15pt}导出子图:从原图 G(V,E) 中选取一个点集 S \subseteq V,并保留所有两端均在 S 中的边构成的子图 G(S)

输入描述:

\hspace{15pt}第一行输入两个整数 n, q \left(1\leq n\leq2\times10^5;\,1\leq q\leq2\times10^5\right),表示树的结点数、修改次数。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left(-10^9\leq a_i\leq10^9\right),表示每个点的权值。
\hspace{15pt}此后 n-1 行,第 i 行输入两个正整数 u_i,v_i \left(1\leq u_i,v_i\leq n\right),表示第 i 条边连接结点 u_iv_i
\hspace{15pt}此后 q 行,第 i 行输入两个整数 {\rm pos}_i,x_i \left(1\leq {\rm pos}_i\leq n;\,-10^9\leq x_i\leq10^9\right),表示第 i 次修改将第 {\rm pos}_i 个点的权值修改为 x_i

输出描述:

\hspace{15pt}对于每一次修改,新起一行输出一个整数,表示修改后的最大非空子树和。
示例1

输入

复制
3 3
7 11 20
2 1
3 1
1 -13
3 -7
3 -13

输出

复制
20
18
18