#include <bits/stdc++.h>
using namespace std;
long long n, m, h[600100], d[600100], sum, tt;
bool sta;
struct Node {
  long long lp, rp, mx, lx, rx, ls, rs;
} node[600100 << 1], ans;
inline void up(long long u) {
  long long L = node[u].ls, R = node[u].rs;
  node[u].lp = node[L].lp;
  node[u].rp = node[R].rp;
  node[u].lx = max(node[L].lx, node[R].lp - node[L].lp + node[R].lx);
  node[u].rx = max(node[R].rx, node[L].rx + node[R].rp - node[L].rp);
  node[u].mx = max(max(node[L].mx, node[R].mx),
                   node[L].rx + node[R].lx + node[R].lp - node[L].rp);
}
inline Node hb(Node L, Node R) {
  Node res;
  res.lp = L.lp;
  res.rp = R.rp;
  res.lx = max(L.lx, R.lp - L.lp + R.lx);
  res.rx = max(R.rx, L.rx + R.rp - L.rp);
  res.mx = max(max(L.mx, R.mx), L.rx + R.lx + R.lp - L.rp);
  return res;
}
void build(long long now, long long l, long long r) {
  if (l == r) {
    node[now].lx = node[now].rx = h[l] * 2;
    node[now].lp = node[now].rp = d[l];
    return;
  }
  long long mid = ((l + r) >> 1);
  if (l <= mid) {
    node[now].ls = ++tt;
    build(tt, l, mid);
  }
  if (mid < r) {
    node[now].rs = ++tt;
    build(tt, mid + 1, r);
  }
  up(now);
}
void as(long long now, long long l, long long r, long long u, long long v) {
  if (l == u && v == r) {
    if (sta) {
      ans = hb(ans, node[now]);
    } else {
      ans = node[now];
      sta = 1;
    }
    return;
  }
  long long mid = ((l + r) >> 1);
  if (u <= mid) {
    as(node[now].ls, l, mid, u, min(mid, v));
  }
  if (mid < v) {
    as(node[now].rs, mid + 1, r, max(mid + 1, u), v);
  }
}
inline long long ask(long long u, long long v) {
  sta = 0;
  as(1, 1, n * 2, u, v);
  return ans.mx;
}
void out(long long now, long long l, long long r) {
  if (l == r) {
    return;
  }
  long long mid = ((l + r) >> 1);
  out(node[now].ls, l, mid);
  out(node[now].rs, mid + 1, r);
}
int main() {
  long long i, j, p, q;
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    scanf("%lld", &p);
    sum += p;
    d[i + 1] = d[i] + p;
  }
  for (i = 1; i <= n; i++) {
    scanf("%lld", &h[i]);
    h[n + i] = h[i];
  }
  for (i = n + 1; i <= n * 2; i++) d[i] = d[i - n] + sum;
  build(++tt, 1, 2 * n);
  for (i = 1; i <= m; i++) {
    scanf("%lld%lld", &p, &q);
    if (p > q) q += n;
    printf("%lld\n", ask(q + 1, p + n - 1));
  }
}
