#include <bits/stdc++.h>
using namespace std;
int n, m, *h;
long long *d;
pair<long long, pair<long long, long long>> *segTree;
pair<long long, pair<long long, long long>> mergeNode(
    pair<long long, pair<long long, long long>> leftNode,
    pair<long long, pair<long long, long long>> rightNode) {
  return {max((leftNode.second.first + rightNode.second.second),
              max(leftNode.first, rightNode.first)),
          {max(leftNode.second.first, rightNode.second.first),
           max(leftNode.second.second, rightNode.second.second)}};
}
pair<long long, pair<long long, long long>> build(int ind = 0, int s = 1,
                                                  int e = 2 * n) {
  if (s == e)
    return segTree[ind] = {0, {2 * h[s] - d[s - 1], 2 * h[s] + d[s - 1]}};
  return segTree[ind] = mergeNode(build(2 * ind + 1, s, (s + e) / 2),
                                  build(2 * ind + 2, (s + e) / 2 + 1, e));
}
pair<long long, pair<long long, long long>> query(int qs, int qe, int ind = 0,
                                                  int s = 1, int e = 2 * n) {
  if (qs <= s && qe >= e) return segTree[ind];
  if (qe <= (s + e) / 2) return query(qs, qe, 2 * ind + 1, s, (s + e) / 2);
  if (qs > (s + e) / 2) return query(qs, qe, 2 * ind + 2, (s + e) / 2 + 1, e);
  pair<long long, pair<long long, long long>> leftNode =
      query(qs, qe, 2 * ind + 1, s, (s + e) / 2);
  pair<long long, pair<long long, long long>> rightNode =
      query(qs, qe, 2 * ind + 2, (s + e) / 2 + 1, e);
  return max(mergeNode(leftNode, rightNode), max(leftNode, rightNode));
}
int main() {
  cin >> n >> m;
  d = new long long[2 * n + 1];
  d[0] = 0;
  h = new int[2 * n + 1];
  int sz = 2 * 1 << (int(ceil(log2(2 * n)))) + 1;
  segTree = new pair<long long, pair<long long, long long>>[sz];
  for (int i = 1; i <= n; i++) cin >> d[i], d[i + n] = d[i];
  for (int i = 1; i <= n; i++) cin >> h[i], h[i + n] = h[i];
  for (int i = 1; i < 2 * n; i++) d[i] += d[i - 1];
  build();
  while (m--) {
    int a, b;
    cin >> a >> b;
    if (a <= b)
      cout << query(b + 1, a + n - 1).first << endl;
    else
      cout << query(b + 1, a - 1).first << endl;
  }
  return 0;
}
