#include <bits/stdc++.h>
using namespace std;
int n;
class segtree {
 public:
  static const int N = 1 << 19;
  long long dp[2][1 << 20];
  segtree() { memset(dp, 0, sizeof(dp)); }
  void update(int lv, int k, long long v) {
    k += N - 1;
    dp[lv][k] += v;
    while (k > 0) {
      k = (k - 1) / 2;
      dp[lv][k] = dp[lv][k * 2 + 1] + dp[lv][k * 2 + 2];
    }
  }
  long long query(int lv, int a, int b, int k = 0, int l = 0, int r = N) {
    if (b <= l || r <= a) return 0;
    if (a <= l && r <= b) return dp[lv][k];
    int mid = (l + r) / 2;
    long long vl = query(lv, a, b, k * 2 + 1, l, mid);
    long long vr = query(lv, a, b, k * 2 + 2, mid, r);
    return vl + vr;
  }
  long long get(int v) {
    int l = 0, r = N, k = 0;
    int cnt = 0;
    while (l + 1 < r) {
      if (dp[0][k * 2 + 2] + cnt <= v) {
        cnt += dp[0][k * 2 + 2];
        k = k * 2 + 1;
        r = (l + r) / 2;
      } else {
        k = k * 2 + 2;
        l = (l + r) / 2;
      }
    }
    return query(1, r, N);
  }
  long long find() {
    int vl = 0, vr = n - 1;
    for (int i = 0; i < 100; i++) {
      int midl = (vl * 2 + vr) / 3;
      int midr = (vl + vr * 2) / 3;
      if (get(midl * 2) <= get(midr * 2)) {
        vl = midl;
      } else {
        vr = midr;
      }
    }
    long long maxi = 0;
    for (int i = vl; i <= vr; i++) {
      maxi = max(maxi, get(i * 2));
    }
    return maxi;
  }
};
segtree seg;
int q;
long long a[200005], b[200005];
int p[200005];
long long x[200005], y[200005];
vector<long long> vec;
int main(void) {
  scanf("%d%d", &n, &q);
  long long ans = 0;
  for (int i = 0; i < n * 2; i++) {
    scanf("%lld", &a[i]);
    ans += a[i];
  }
  for (int i = 0; i < n * 2; i++) {
    scanf("%lld", &b[i]);
  }
  for (int i = 0; i < n * 2; i++) {
    vec.push_back(b[i] - a[i]);
  }
  for (int i = 0; i < q; i++) {
    scanf("%d%lld%lld", &p[i], &x[i], &y[i]);
    p[i]--;
    vec.push_back(y[i] - x[i]);
  }
  sort(vec.begin(), vec.end());
  vec.erase(unique(vec.begin(), vec.end()), vec.end());
  for (int i = 1; i < n * 2 - 1; i++) {
    int lv = lower_bound(vec.begin(), vec.end(), b[i] - a[i]) - vec.begin();
    seg.update(0, lv, 1);
    seg.update(1, lv, b[i] - a[i]);
  }
  for (int i = 0; i < q; i++) {
    int lv =
        lower_bound(vec.begin(), vec.end(), b[p[i]] - a[p[i]]) - vec.begin();
    if (p[i] != 0 && p[i] != n * 2 - 1) seg.update(0, lv, -1);
    if (p[i] != 0 && p[i] != n * 2 - 1) seg.update(1, lv, a[p[i]] - b[p[i]]);
    b[p[i]] = y[i];
    ans -= a[p[i]];
    a[p[i]] = x[i];
    ans += a[p[i]];
    lv = lower_bound(vec.begin(), vec.end(), b[p[i]] - a[p[i]]) - vec.begin();
    if (p[i] != 0 && p[i] != n * 2 - 1) seg.update(0, lv, 1);
    if (p[i] != 0 && p[i] != n * 2 - 1) seg.update(1, lv, b[p[i]] - a[p[i]]);
    printf("%lld\n", ans + seg.find());
  }
  return 0;
}
