#include <bits/stdc++.h>
using namespace std;
const long long maxn = 2e5 + 5;
const long long mod = 1e9 + 7;
const long long INF = 1e18 + 1;
long long d[maxn];
long long h[maxn];
long long p[maxn];
struct nd {
  long long ans, big, small;
};
nd t[4 * maxn];
nd merge(nd lf, nd rg) {
  nd ret = {0, 0, 0};
  ret.ans = max({rg.ans, lf.ans, rg.big - lf.small});
  ret.big = max({lf.big, rg.big});
  ret.small = min({lf.small, rg.small});
  return ret;
}
void build(long long v, long long tl, long long tr) {
  if (tl == tr) {
    t[v] = {0, p[tl] + 2 * h[tl], p[tl] - 2 * h[tl]};
    return;
  }
  long long tm = tl + tr >> 1;
  build(v << 1, tl, tm);
  build(v << 1 | 1, tm + 1, tr);
  t[v] = merge(t[v << 1], t[v << 1 | 1]);
}
nd ask(long long v, long long tl, long long tr, long long l, long long r) {
  if (r < tl || tr < l) return {0, 0, INF};
  if (l <= tl && tr <= r) {
    return t[v];
  }
  long long tm = tl + tr >> 1;
  return merge(ask(v << 1, tl, tm, l, r), ask(v << 1 | 1, tm + 1, tr, l, r));
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  for (long long i = 1; i <= n; i++) {
    cin >> d[i];
    d[i + n] = d[i];
  }
  p[0] = 0;
  for (long long i = 1; i <= 2 * n; i++) {
    p[i] = p[i - 1] + d[i];
  }
  for (long long i = 2 * n; i >= 1; i--) {
    p[i] = p[i - 1];
  }
  for (long long i = 1; i <= n; i++) {
    cin >> h[i];
    h[i + n] = h[i];
  }
  build(1, 0, maxn - 1);
  while (m--) {
    long long x, y;
    cin >> x >> y;
    if (y < x) y += n;
    cout << ask(1, 0, maxn - 1, y + 1, x + n - 1).ans << '\n';
  }
  return 0;
}
