#include <bits/stdc++.h>
using namespace std;
const int maxn2 = (1 << 15) / 4, c = 3, len = 4;
int n, q;
const long long minf = -1e17 - 79;
vector<pair<long long, int> > w(maxn2*len, {0, 0}), h(maxn2*len, {0, 0});
vector<int> bad(maxn2*len, 0), l(maxn2 * 2), r(maxn2 * 2), ord(maxn2*len, -1),
    in(len);
vector<array<array<long long, c>, c> > st(maxn2 * 2);
long long calculate(int i, int j) {
  if (i - 1 > j) return minf;
  if (i >= n || i - 1 == j) return 0;
  j = min(j, n - 1);
  long long ans = minf;
  for (int k = i; k <= j; k++) in[k - i] = k - i;
  do {
    long long cur = 0;
    for (int k = i; k <= j; k++) {
      if (h[in[k - i] + i].second == bad[w[k].second]) cur = minf;
      if (cur != minf) cur += h[in[k - i] + i].first * w[k].first;
    }
    if (cur != minf) ans = max(ans, cur);
  } while (next_permutation(in.begin(), in.begin() + (j - i + 1)));
  return ans;
}
void merge(int vr) {
  for (int l = 0; l < c; l++)
    for (int r = 0; r < c; r++) st[vr][l][r] = minf;
  for (int cutl = 0; cutl < c; cutl++)
    for (int cutr = 0; cutr < c; cutr++)
      for (int cutmidl = 0; cutmidl < c; cutmidl++)
        for (int cutmidr = 0; cutmidr < c; cutmidr++) {
          int midlen = cutmidl + cutmidr, li = r[vr * 2 + 1] - cutmidl + 1,
              ri = l[vr * 2 + 2] + cutmidr - 1;
          if (midlen == 0 || midlen == 2 || midlen == 3)
            st[vr][cutl][cutr] =
                max(st[vr][cutl][cutr], st[vr * 2 + 1][cutl][cutmidl] +
                                            calculate(li, ri) +
                                            st[vr * 2 + 2][cutmidr][cutr]);
        }
}
void change(int i) {
  i += maxn2 - 1;
  for (int cutl = 0; cutl < c; cutl++)
    for (int cutr = 0; cutr < c; cutr++)
      st[i][cutl][cutr] = calculate(l[i] + cutl, r[i] - cutr);
  for (int vr = (i - 1) / 2;; vr = (vr - 1) / 2) {
    merge(vr);
    if (!vr) break;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  for (int i = 0; i < maxn2 * 2; i++)
    for (int j = 0; j < c; j++)
      for (int k = 0; k < c; k++) st[i][j][k] = minf;
  for (int i = maxn2 - 1; i < maxn2 * 2; i++)
    l[i] = (i - (maxn2 - 1)) * len, r[i] = (i - (maxn2 - 1)) * len + len - 1;
  for (int i = maxn2 - 2; i >= 0; i--) l[i] = l[i * 2 + 1], r[i] = r[i * 2 + 2];
  cin >> n >> q;
  for (int i = 0; i < n; i++) {
    cin >> w[i].first;
    w[i].second = i;
    bad[i] = i;
  }
  for (int i = 0; i < n; i++) {
    cin >> h[i].first;
    h[i].second = i;
  }
  sort(w.begin(), w.begin() + n), sort(h.begin(), h.begin() + n);
  for (int i = 0; i < n; i++) ord[w[i].second] = i;
  for (int i = maxn2 - 1; i < maxn2 * 2; i++)
    for (int cutl = 0; cutl < c; cutl++)
      for (int cutr = 0; cutr < c; cutr++)
        st[i][cutl][cutr] = calculate(l[i] + cutl, r[i] - cutr);
  for (int i = maxn2 - 2; i >= 0; i--) merge(i);
  for (int i = 0; i < q; i++) {
    int a, b;
    cin >> a >> b;
    swap(bad[--a], bad[--b]);
    change(ord[a] / len);
    change(ord[b] / len);
    cout << st[0][0][0] << "\n";
  }
  return 0;
}
