#include <bits/stdc++.h>
using namespace std;
struct SegmentTree {
 private:
  int n;
  vector<long long> node_plus;
  vector<long long> node_minus;

 public:
  SegmentTree() {
    int sz = 200005;
    n = 1;
    while (n < sz) n *= 2;
    node_plus.resize(2 * n - 1, (1e16));
    node_minus.resize(2 * n - 1, -(1e16));
    for (int i = 0; i < node_plus.size(); i++) {
      node_plus[i] = (1e16);
      node_minus[i] = -(1e16);
    }
  }
  void update(int x, long long val) {
    x += (n - 1);
    if (val >= 0) {
      node_minus[x] = -(1e16);
      node_plus[x] = val;
    } else {
      node_minus[x] = val;
      node_plus[x] = (1e16);
    }
    while (x > 0) {
      x = (x - 1) / 2;
      node_minus[x] = max(node_minus[2 * x + 1], node_minus[2 * x + 2]);
      node_plus[x] = min(node_plus[2 * x + 1], node_plus[2 * x + 2]);
    }
  }
  long long getminus(int a, int b, int k = 0, int l = 0, int r = -1) {
    if (r < 0) r = n;
    if (r <= a || b <= l) return -(1e16);
    if (a <= l && r <= b) return node_minus[k];
    long long vl = getminus(a, b, 2 * k + 1, l, (l + r) / 2);
    long long vr = getminus(a, b, 2 * k + 2, (l + r) / 2, r);
    return max(vl, vr);
  }
  long long getplus(int a, int b, int k = 0, int l = 0, int r = -1) {
    if (r < 0) r = n;
    if (r <= a || b <= l) return (1e16);
    if (a <= l && r <= b) return node_plus[k];
    long long vl = getplus(a, b, 2 * k + 1, l, (l + r) / 2);
    long long vr = getplus(a, b, 2 * k + 2, (l + r) / 2, r);
    return min(vl, vr);
  }
};
int main() {
  SegmentTree seg;
  int n, q;
  cin >> n >> q;
  long long a[200500];
  long long b[200500];
  long long asum = 0;
  for (int i = 1; i <= 2 * n; i++) {
    cin >> a[i];
    asum += a[i];
  }
  for (int i = 1; i <= 2 * n; i++) {
    cin >> b[i];
  }
  long long ans = asum;
  long long checker = 0;
  for (int i = 2; i < 2 * n; i++) {
    long long delta = b[i] - a[i];
    if (delta > 0) {
      ans += delta;
      checker++;
    }
    seg.update(i, delta);
  }
  for (int time = 0; time < q; time++) {
    int p;
    long long x, y;
    cin >> p >> x >> y;
    ans = ans - a[p] + x;
    long long before = b[p] - a[p];
    long long after = y - x;
    a[p] = x;
    b[p] = y;
    if ((p == 1) || (p == 2 * n)) {
      cout << ans << endl;
      continue;
    }
    ans = ans - max((long long)0, before) + max((long long)0, after);
    if ((before > 0) && (after <= 0)) {
      checker--;
    }
    if ((before <= 0) && (after > 0)) {
      checker++;
    }
    seg.update(p, after);
    if (checker % 2 == 0) {
      cout << ans << endl;
      continue;
    }
    cout << ans - min(-seg.getminus(1, 2 * n), seg.getplus(1, 2 * n)) << endl;
  }
  return 0;
}
