#include <bits/stdc++.h>
using namespace std;
template <typename T>
T Abs(T first) {
  return (first < 0 ? -first : first);
}
template <typename T>
T Sqr(T first) {
  return (first * first);
}
string plural(string s) {
  return (int((s).size()) && s[int((s).size()) - 1] == 'x' ? s + "en"
                                                           : s + "s");
}
const int INF = (int)1e9;
const long double EPS = 1e-9;
const long double PI = acos(-1.0);
bool Read(int &first) {
  char c, r = 0, n = 0;
  first = 0;
  for (;;) {
    c = getchar();
    if ((c < 0) && (!r)) return (0);
    if ((c == '-') && (!r))
      n = 1;
    else if ((c >= '0') && (c <= '9'))
      first = first * 10 + c - '0', r = 1;
    else if (r)
      break;
  }
  if (n) first = -first;
  return (1);
}
int N, M;
pair<int, int> A[30010], B[30010];
int H[30010];
int ind[30010];
int s1[180], s2[180];
long long dyn[180][3][3];
long long dyn2[30010];
int sec[30010];
long long dyn3[180][3];
void calc(int s) {
  int a = s1[s];
  int b = s2[s];
  int c = min(N, b + 3);
  int z;
  int i;
  long long d;
  for (z = a; z <= a + 2; z++) {
    for (i = z; i <= c; i++) dyn2[i] = -1;
    dyn2[z] = 0;
    for (i = z; i <= c - 1; i++)
      if ((d = dyn2[i]) >= 0) {
        if (H[A[i].second] != B[i].second)
          dyn2[i + 1] =
              max(dyn2[i + 1], d + (long long)A[i].first * B[i].first);
        if (i + 1 >= N) continue;
        if (H[A[i + 1].second] != B[i].second &&
            H[A[i].second] != B[i + 1].second)
          dyn2[i + 2] =
              max(dyn2[i + 2], d + (long long)A[i + 1].first * B[i].first +
                                   (long long)A[i].first * B[i + 1].first);
        if (i + 2 >= N) continue;
        if (H[A[i + 1].second] != B[i].second &&
            H[A[i + 2].second] != B[i + 1].second &&
            H[A[i].second] != B[i + 2].second)
          dyn2[i + 3] =
              max(dyn2[i + 3], d + (long long)A[i + 1].first * B[i].first +
                                   (long long)A[i + 2].first * B[i + 1].first +
                                   (long long)A[i].first * B[i + 2].first);
        if (H[A[i + 2].second] != B[i].second &&
            H[A[i].second] != B[i + 1].second &&
            H[A[i + 1].second] != B[i + 2].second)
          dyn2[i + 3] =
              max(dyn2[i + 3], d + (long long)A[i + 2].first * B[i].first +
                                   (long long)A[i].first * B[i + 1].first +
                                   (long long)A[i + 1].first * B[i + 2].first);
      }
    for (i = 0; i < 3; i++)
      if (b + 1 + i <= c) dyn[s][z - a][i] = dyn2[b + 1 + i];
  }
}
int main() {
  if (0) freopen("in.txt", "r", stdin);
  int Q;
  int i, j, k;
  long long ans;
  Read(N), Read(Q);
  for (i = 0; i < N; i++) Read(A[i].first), A[i].second = i;
  for (i = 0; i < N; i++) Read(B[i].first), B[i].second = i;
  if (N == 2) {
    i = 1;
    while (Q--) {
      i = 1 - i;
      ans = (long long)A[0].first * B[i].first;
      ans += (long long)A[1].first * B[1 - i].first;
      cout << ans << endl;
    }
    return (0);
  }
  sort(A, A + N);
  sort(B, B + N);
  for (i = 0; i < N; i++) ind[A[i].second] = i;
  for (i = 0; i < N; i++) H[i] = i;
  i = 0;
  M = 0;
  while (i < N) {
    j = min(N - 1, i + 180 - 1);
    if ((N - 1) - (j + 1) + 1 <= 2) j = N - 1;
    s1[M] = i;
    s2[M] = j;
    for (k = i; k <= j; k++) sec[k] = M;
    calc(M);
    M++;
    i = j + 1;
  }
  while (Q--) {
    Read(i), Read(j);
    i--, j--;
    swap(H[i], H[j]);
    i = sec[ind[i]];
    j = sec[ind[j]];
    calc(i);
    if (i) calc(i - 1);
    if (i != j) {
      calc(j);
      if (j) calc(j - 1);
    }
    memset(dyn3, -1, sizeof(dyn3));
    dyn3[0][0] = 0;
    for (i = 0; i < M; i++)
      for (j = 0; j < 3; j++)
        if (dyn3[i][j] >= 0)
          for (k = 0; k < 3; k++)
            if (dyn[i][j][k] >= 0)
              dyn3[i + 1][k] = max(dyn3[i + 1][k], dyn3[i][j] + dyn[i][j][k]);
    cout << dyn3[M][0] << endl;
  }
  return (0);
}
