#include <bits/stdc++.h>
using namespace std;
int n, m;
int d[200010], h[200010];
int st[(1 << 19) + 10];
long long le[(1 << 19) + 10], ri[(1 << 19) + 10], best[(1 << 19) + 10];
long long sum[(1 << 19) + 10];
const long long INF = 1LL << 50;
struct inf {
  long long a, b, c, d, e;
  inf(long long q, long long w, long long r, long long t, long long y) {
    a = q, b = w, c = r, d = t, e = y;
  }
};
void init(int nd, int l, int r) {
  if (l == r) {
    st[nd] = d[(r - 2 + n) % n];
    best[nd] = 0;
    le[nd] = 2 * h[(r - 1) % n];
    ri[nd] = 2 * h[(r - 1) % n];
    sum[nd] = 0;
    return;
  }
  int h = (l + r) >> 1;
  init(2 * nd, l, h);
  init(2 * nd + 1, h + 1, r);
  best[nd] = max(best[2 * nd], best[2 * nd + 1]);
  best[nd] = max(best[nd], le[2 * nd + 1] + ri[2 * nd] + st[2 * nd + 1]);
  le[nd] = max(le[2 * nd], sum[2 * nd] + st[2 * nd + 1] + le[2 * nd + 1]);
  ri[nd] = max(ri[2 * nd + 1], sum[2 * nd + 1] + st[2 * nd + 1] + ri[2 * nd]);
  sum[nd] = sum[2 * nd] + sum[2 * nd + 1] + st[2 * nd + 1];
  st[nd] = st[2 * nd];
}
inf get(int nd, int l, int r, int lt, int rt) {
  if (l > rt || r < lt) return inf(-INF, -INF, -INF, -INF, -INF);
  if (l >= lt && r <= rt) {
    return inf(best[nd], le[nd], ri[nd], sum[nd], st[nd]);
  }
  int h = (l + r) >> 1;
  inf a = get(2 * nd, l, h, lt, rt);
  inf b = get(2 * nd + 1, h + 1, r, lt, rt);
  inf c(0, 0, 0, 0, 0);
  c.a = max(a.a, b.a);
  c.a = max(c.a, b.b + a.c + b.e);
  c.b = max(a.b, a.d + b.e + b.b);
  c.c = max(b.c, b.d + b.e + a.c);
  c.d = a.d + b.d + b.e;
  c.e = a.e;
  c.a = max(c.a, -INF);
  c.b = max(c.b, -INF);
  c.c = max(c.c, -INF);
  c.d = max(c.d, -INF);
  return c;
}
long long bf(int a, int b) {
  long long ans = 0;
  for (int i = a - 1; i < b; i++) {
    for (int j = i + 1; j < b; j++) {
      long long tmp = 2 * h[i] + 2 * h[j];
      for (int k = i; k < j; k++) tmp += d[k];
      ans = max(ans, tmp);
    }
  }
  return ans;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) scanf("%d", d + i);
  for (int i = 0; i < n; i++) scanf("%d", h + i);
  for (int i = n; i < 2 * n; i++) {
    d[i] = d[i - n];
    h[i] = h[i - n];
  }
  init(1, 1, 2 * n);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (b < a) b += n;
    a = 2 * n - (n - a);
    long long l = 0;
    inf tmp = get(1, 1, 2 * n, b + 1, a - 1);
    cout << tmp.a << "\n";
  }
  return 0;
}
