#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1 << 18;
const long long INF = 1e18;
int n, m, d[MAXN], h[MAXN];
long long p[MAXN];
pair<int, int> t[2][2 * MAXN];
long long calc(int i, int k) {
  if (i == -1) return -INF;
  if (k == 0)
    return 2 * h[i] + p[i];
  else
    return 2 * h[i] - p[i];
}
pair<long long, long long> getp(int i, int k) {
  return pair<long long, long long>(calc(i, k), i);
}
pair<long long, long long> ar[5];
pair<int, int> merge(pair<int, int> p1, pair<int, int> p2, int k) {
  ar[3] = getp(p1.first, k);
  ar[1] = getp(p1.second, k);
  ar[2] = getp(p2.first, k);
  ar[0] = getp(p2.second, k);
  sort(ar, ar + 4);
  return pair<int, int>(ar[3].second, ar[2].second);
}
void init(int cur, int lt, int rt) {
  if (lt + 1 == rt) {
    t[0][cur] = t[1][cur] = pair<int, int>(lt, -1);
  } else {
    int mid = (lt + rt) / 2;
    init(2 * cur, lt, mid);
    init(2 * cur + 1, mid, rt);
    for (int k = 0; k < 2; k++)
      t[k][cur] = merge(t[k][2 * cur], t[k][2 * cur + 1], k);
  }
}
pair<int, int> qry(int cur, int lt, int rt, int ql, int qr, int k) {
  if (rt <= ql || lt >= qr)
    return pair<int, int>(-1, -1);
  else if (lt >= ql && rt <= qr)
    return t[k][cur];
  else {
    int mid = (lt + rt) / 2;
    return merge(qry(2 * cur, lt, mid, ql, qr, k),
                 qry(2 * cur + 1, mid, rt, ql, qr, k), k);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  if (fopen("input.txt", "r")) freopen("input.txt", "r", stdin);
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> d[i];
  for (int i = 0; i < n; i++) cin >> h[i];
  for (int i = 0; i < n; i++) d[i + n] = d[i];
  for (int i = 0; i < n; i++) h[i + n] = h[i];
  for (int i = 0; i < 2 * n; i++) p[i + 1] = p[i] + d[i];
  init(1, 0, 2 * n);
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    pair<int, int> p1, p2;
    if (a <= b) {
      p1 = qry(1, 0, 2 * n, b + 1, a + n, 0);
      p2 = qry(1, 0, 2 * n, b + 1, a + n, 1);
    } else {
      p1 = qry(1, 0, 2 * n, b + 1, a, 0);
      p2 = qry(1, 0, 2 * n, b + 1, a, 1);
    }
    if (p1.first != p2.first)
      cout << calc(p1.first, 0) + calc(p2.first, 1) << '\n';
    else
      cout << max(calc(p1.first, 0) + calc(p2.second, 1),
                  calc(p1.second, 0) + calc(p2.first, 1))
           << '\n';
  }
}
