#include <bits/stdc++.h>
using namespace std;
inline int read() {
  char ch = getchar();
  int x = 0, f = 1;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
long long w1[30005], w2[30005], w3[30005], f[30005];
int n, m, rka[30005], rkb[30005], ban[30005];
struct data {
  int v, id;
} a[30005], b[30005];
bool cmp(data x, data y) { return x.v < y.v; }
void calc(int i) {
  w1[i] = w2[i] = w3[i] = -(1ll << 60);
  if (i >= 1 && ban[i] != i) w1[i] = 1ll * a[i].v * b[i].v;
  if (i >= 2 && ban[i] != i - 1 && ban[i - 1] != i)
    w2[i] = 1ll * a[i].v * b[i - 1].v + 1ll * a[i - 1].v * b[i].v;
  if (i >= 3) {
    if (ban[i] != i - 2 && ban[i - 1] != i && ban[i - 2] != i - 1)
      w3[i] = 1ll * a[i].v * b[i - 2].v + 1ll * a[i - 1].v * b[i].v +
              1ll * a[i - 2].v * b[i - 1].v;
    if (ban[i] != i - 1 && ban[i - 1] != i - 2 && ban[i - 2] != i)
      w3[i] =
          max(w3[i], 1ll * a[i].v * b[i - 1].v + 1ll * a[i - 1].v * b[i - 2].v +
                         1ll * a[i - 2].v * b[i].v);
  }
}
int main() {
  n = read();
  m = read();
  for (int i = 1; i <= n; ++i) a[i] = (data){read(), i};
  for (int i = 1; i <= n; ++i) b[i] = (data){read(), i};
  sort(a + 1, a + 1 + n, cmp);
  sort(b + 1, b + 1 + n, cmp);
  for (int i = 1; i <= n; ++i) rka[a[i].id] = i, rkb[b[i].id] = i;
  for (int i = 1; i <= n; ++i) ban[i] = rkb[a[i].id];
  for (int i = 1; i <= n; ++i) calc(i);
  while (m--) {
    int x = rka[read()], y = rka[read()];
    swap(ban[x], ban[y]);
    for (int i = max(1, x - 2); i <= min(n, x + 2); ++i) calc(i);
    for (int i = max(1, y - 2); i <= min(n, y + 2); ++i) calc(i);
    f[0] = 0;
    for (int i = 1; i <= n; ++i) {
      if (i >= 1) f[i] = f[i - 1] + w1[i];
      if (i >= 2) f[i] = max(f[i], f[i - 2] + w2[i]);
      if (i >= 3) f[i] = max(f[i], f[i - 3] + w3[i]);
    }
    printf("%lld\n", f[n]);
  }
}
