#include <bits/stdc++.h>
const long double PI = acos(-1);
const long double eps = 0.0000000001;
const long long INF = 0x3fffffffffffffff;
long long n, m, sum[200005], d[100005], h[100005], v1[200005], v2[200005];
template <long long *x>
struct ST {
  long long max[19][200005];
  long long lg[200005];
  long long cmax(long long A, long long B) { return x[A] < x[B] ? B : A; }
  void init() {
    x[0] = -INF;
    for (long long i = 1; i <= n + n; ++i) max[0][i] = i;
    lg[1] = 0;
    for (long long i = 2; i <= n + n; ++i) lg[i] = lg[i - 1] + !(i & (i - 1));
    for (long long i = 1; 1 << i <= n + n; ++i)
      for (long long j = 1; j + (1 << i) - 1 <= n + n; ++j)
        max[i][j] = cmax(max[i - 1][j], max[i - 1][j + (1 << i >> 1)]);
  }
  long long query(long long l, long long r) {
    if (l > r) return 0;
    long long len = lg[r - l + 1];
    return cmax(max[len][l], max[len][r - (1 << len) + 1]);
  }
};
ST<v1> A;
ST<v2> B;
signed main() {
  std::ios::sync_with_stdio(false);
  std::cin >> n >> m;
  for (long long i = 1; i <= n; ++i) std::cin >> d[i];
  for (long long i = 1; i <= n; ++i) std::cin >> h[i];
  for (long long i = 1; i <= n; ++i) sum[i + 1] = sum[i] + d[i];
  for (long long i = n + 1; i < n + n; ++i) sum[i + 1] = sum[i] + d[i - n];
  for (long long i = 1; i <= n + n; ++i)
    v1[i] = h[i > n ? i - n : i] * 2 - sum[i];
  for (long long i = 1; i <= n + n; ++i)
    v2[i] = h[i > n ? i - n : i] * 2 + sum[i];
  A.init();
  B.init();
  for (long long i = 1; i <= m; ++i) {
    static long long x, y;
    std::cin >> x >> y;
    if (x <= y) {
      std::swap(x, y);
      x = x + 1;
      y = y + n - 1;
    } else {
      std::swap(x, y);
      x = x + 1;
      y = y - 1;
    }
    long long f = A.query(x, y), t = B.query(x, y);
    if (f == t)
      std::cout << std::max(v2[B.query(f + 1, y)] + v1[f],
                            v2[t] + v1[A.query(x, t - 1)])
                << std::endl;
    else
      std::cout << v2[t] + v1[f] << std::endl;
  }
  return 0;
}
