#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int d[N], h[N];
int ql, qr, n, m;
struct Interval {
  long long prefix, suffix, ans, sum;
  int l, r;
  Interval operator+(const Interval &a) const {
    Interval res;
    res.ans = max(ans, a.ans);
    res.ans = max(res.ans, suffix + a.prefix + d[r]);
    res.l = l, res.r = a.r;
    res.prefix = max(prefix, a.prefix + sum + d[r]);
    res.suffix = max(a.suffix, suffix + a.sum + d[r]);
    res.sum = sum + a.sum + d[r];
    return res;
  }
};
Interval sgt[N << 2];
void build(int x, int l, int r) {
  if (l == r) {
    sgt[x] = {h[l], h[l], h[l], 0, l, r};
  } else {
    int mid = (l + r) >> 1;
    build((x << 1), l, mid), build((x << 1 | 1), mid + 1, r);
    sgt[x] = sgt[(x << 1)] + sgt[(x << 1 | 1)];
  }
}
Interval query(int x, int l, int r) {
  if (ql <= l && qr >= r) {
    return sgt[x];
  } else {
    int mid = (l + r) >> 1;
    if (ql > mid) return query((x << 1 | 1), mid + 1, r);
    if (qr <= mid) return query((x << 1), l, mid);
    return query((x << 1), l, mid) + query((x << 1 | 1), mid + 1, r);
  }
}
void init() {
  for (int i = (int)(1); i <= (int)(n); i++) {
    h[i] <<= 1;
    h[i + n] = h[i];
    d[i + n] = d[i];
  }
  n <<= 1;
  build(1, 1, n);
}
int get() {
  char c;
  while (c = getchar(), (c < '0' || c > '9') && (c != '-'))
    ;
  bool flag = (c == '-');
  if (flag) c = getchar();
  int x = 0;
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - 48;
    c = getchar();
  }
  return flag ? -x : x;
}
void output(long long x) {
  if (x < 0) putchar('-'), x = -x;
  int len = 0, bit[20];
  while (x) {
    bit[len++] = x % 10;
    x /= 10;
  }
  if (!len) bit[len++] = 0;
  while (len--) putchar(bit[len] + 48);
  putchar('\n');
}
int main() {
  n = get(), m = get();
  for (int i = (int)(1); i <= (int)(n); i++) {
    d[i] = get();
  }
  for (int i = (int)(1); i <= (int)(n); i++) {
    h[i] = get();
  }
  init();
  while (m--) {
    ql = get(), qr = get();
    if (ql > qr) {
      swap(ql, qr);
      ql++, qr--;
      output(query(1, 1, n).ans);
    } else {
      int tmp = ql;
      ql = qr + 1;
      qr = tmp + n / 2 - 1;
      output(query(1, 1, n).ans);
    }
  }
  return 0;
}
