#include <bits/stdc++.h>
using namespace std;
const int limite = 1000000;
const long long int infinito = 1000000000000000000LL;
int n, q;
pair<long long int, int> ww[limite], hh[limite];
long long int mejor[limite];
int asignacion[limite];
long long int p[limite][3];
long long int pi[limite][3];
long long int cal[limite];
long long int calba[limite];
long long int calbca[limite];
long long int calcab[limite];
int condicion[limite];
int condicionba[limite];
int condicionbca[limite];
int condicioncab[limite];
long long int w[limite];
long long int h[limite];
int iw[limite];
int ih[limite];
int iwinv[limite];
void computacondicion(int i) {
  if (i <= 0 or i > n) return;
  condicion[i] = asignacion[iw[i]] != ih[i];
  condicionba[i] = i >= 2 and asignacion[iw[i - 1]] != ih[i] and
                   asignacion[iw[i]] != ih[i - 1];
  condicionbca[i] = i >= 3 and asignacion[iw[i - 2]] != ih[i] and
                    asignacion[iw[i - 1]] != ih[i - 2] and
                    asignacion[iw[i]] != ih[i - 1];
  condicioncab[i] = i >= 3 and asignacion[iw[i - 2]] != ih[i - 1] and
                    asignacion[iw[i - 1]] != ih[i] and
                    asignacion[iw[i]] != ih[i - 2];
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> q;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    ww[i].first = x;
    ww[i].second = i;
    asignacion[i] = i;
  }
  for (int i = 1; i <= n; i++) {
    cin >> hh[i].first;
    hh[i].second = i;
  }
  sort(ww + 1, ww + (n + 1));
  sort(hh + 1, hh + (n + 1));
  for (int i = 1; i <= n; i++) {
    w[i] = ww[i].first;
    iw[i] = ww[i].second;
    iwinv[iw[i]] = i;
    h[i] = hh[i].first;
    ih[i] = hh[i].second;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < 3 and 1 <= i - j; j++) p[i][j] = w[i] * h[i - j];
    for (int j = 0; j < 3 and i + j <= n; j++) pi[i][j] = w[i] * h[i + j];
    cal[i] = p[i][0];
    if (i >= 2) calba[i] = pi[i - 1][1] + p[i][1];
    if (i >= 3) {
      calbca[i] = pi[i - 2][2] + p[i - 1][1] + p[i][1];
      calcab[i] = pi[i - 2][1] + pi[i - 1][1] + p[i][2];
    }
  }
  for (int i = 1; i <= n; i++) computacondicion(i);
  for (int caso = 0; caso < q; caso++) {
    int a, b;
    cin >> a >> b;
    swap(asignacion[a], asignacion[b]);
    computacondicion(iwinv[a]);
    computacondicion(iwinv[a] + 1);
    computacondicion(iwinv[a] + 2);
    computacondicion(iwinv[b]);
    computacondicion(iwinv[b] + 1);
    computacondicion(iwinv[b] + 2);
    for (int i = 1; i <= n; i++) {
      mejor[i] = -infinito;
      if (condicion[i]) mejor[i] = max(mejor[i], mejor[i - 1] + cal[i]);
      if (condicionba[i]) mejor[i] = max(mejor[i], mejor[i - 2] + calba[i]);
      if (condicionbca[i]) mejor[i] = max(mejor[i], mejor[i - 3] + calbca[i]);
      if (condicioncab[i]) mejor[i] = max(mejor[i], mejor[i - 3] + calcab[i]);
    }
    cout << mejor[n] << endl;
  }
}
