#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define ar array
using namespace std;
const int N=3e5+5, INF=1e9+7;
int n, m, a[N], que, p[N], ord[N], btw[N], cst[N];
ll t[4*N][2][2];
vector<ar<int, 3>> e;
vector<int> st[N], wt[N];
void dsu() {
for(int i=1; i<=n; i++)
p[i]=i, st[i].push_back(i);
}
int rt(int u) {
if(p[u]==u)
return u;
return p[u]=rt(p[u]);
}
void unite(int u, int v, int w) {
u=rt(u), v=rt(v);
if(u==v)
return;
if(st[u].size()>st[v].size())
swap(u, v);
for(int x : st[u])
st[v].push_back(x);
wt[v].push_back(w);
for(int x : wt[u])
wt[v].push_back(x);
p[u]=v;
}
void mrg(int i, int l, int r, int m) {
for(int a=0; a<2; a++)
for(int b=0; b<2; b++)
t[i][a][b]=t[2*i][a][1]+t[2*i+1][1][b];
for(int a=0; a<2; a++) {
for(int b=0; b<2; b++) {
for(int c=0; c<2; c++) {
for(int d=0; d<2; d++) {
if(b+c==1)
t[i][a][d]=min(t[i][a][d], t[2*i][a][b]+t[2*i+1][c][d]+btw[m]);
}
}
}
}
}
void bld(int i, int l, int r) {
if(l==r) {
t[i][0][0]=t[i][0][1]=t[i][1][0]=0;
t[i][1][1]=cst[l];
return;
}
int m=l+r>>1;
bld(2*i, l, m);
bld(2*i+1, m+1, r);
mrg(i, l, r, m);
}
void upd(int i, int l, int r, int p) {
if(l==r) {
t[i][0][0]=t[i][0][1]=t[i][1][0]=0;
t[i][1][1]=cst[l];
return;
}
int m=l+r>>1;
if(p<=m)
upd(2*i, l, m, p);
else
upd(2*i+1, m+1, r, p);
mrg(i, l, r, m);
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n; i++)
cin >> a[i];
for(int i=1; i<=m; i++) {
int u, v, w;
cin >> u >> v >> w;
e.push_back({w, u, v});
}
for(int i=1; i<n; i++)
e.push_back({INF, i, i+1});
sort(e.begin(), e.end());
dsu();
for(auto [w, u, v] : e)
unite(u, v, w);
int root=rt(1);
for(int i=0; i<st[root].size(); i++) {
ord[st[root][i]]=i;
if(i+1<st[root].size())
btw[i]=wt[root][i];
}
for(int i=1; i<=n; i++)
cst[ord[i]]=a[i];
cin >> que;
bld(1, 0, n-1);
while(que--) {
int id, w;
cin >> id >> w;
id=ord[id];
cst[id]=w;
upd(1, 0, n-1, id);
cout << t[1][1][1] << endl;
}
return 0;
}