#include <bits/stdc++.h>
using namespace std;
int n, m, a[200005], s[100005];
long long d[200005];
long long z[200005], x[200005];
pair<int, int> f1[200005][20], f2[200005][20];
inline pair<int, int> tim1(int u, int v) {
  int c = int(log2(v - u + 1));
  if (v - (1 << c) + 1 == u) return f1[u][c];
  int t1 = f1[u][c].first;
  int t2 = f1[u][c].second;
  int t3 = f1[v - (1 << c) + 1][c].first;
  int t4 = f1[v - (1 << c) + 1][c].second;
  set<pair<long long, int> > q;
  q.insert(pair<long long, int>(-z[t1], t1));
  q.insert(pair<long long, int>(-z[t2], t2));
  q.insert(pair<long long, int>(-z[t3], t3));
  q.insert(pair<long long, int>(-z[t4], t4));
  typeof((q).begin()) i = q.begin();
  pair<int, int> ds;
  ds.first = (*i).second;
  i++;
  ds.second = (*i).second;
  return ds;
}
inline pair<int, int> tim2(int u, int v) {
  int c = int(log2(v - u + 1));
  if (v - (1 << c) + 1 == u) return f2[u][c];
  int t1 = f2[u][c].first;
  int t2 = f2[u][c].second;
  int t3 = f2[v - (1 << c) + 1][c].first;
  int t4 = f2[v - (1 << c) + 1][c].second;
  set<pair<long long, int> > q;
  q.insert(pair<long long, int>(-x[t1], t1));
  q.insert(pair<long long, int>(-x[t2], t2));
  q.insert(pair<long long, int>(-x[t3], t3));
  q.insert(pair<long long, int>(-x[t4], t4));
  typeof((q).begin()) i = q.begin();
  pair<int, int> ds;
  ds.first = (*i).second;
  i++;
  ds.second = (*i).second;
  return ds;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &s[i]);
  d[0] = d[1] = 0;
  for (int i = 2; i <= 2 * n; i++) {
    if (i - 1 <= n)
      d[i] = d[i - 1] + s[i - 1];
    else
      d[i] = d[i - 1] + s[i - 1 - n];
  }
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = n + 1; i <= 2 * n; i++) a[i] = a[i - n];
  z[0] = x[0] = -2000000000000000LL;
  for (int i = 1; i <= 2 * n; i++) {
    z[i] = 2 * a[i] - d[i];
    x[i] = 2 * a[i] + d[i];
    f1[i][0] = f2[i][0] = pair<int, int>(i, 0);
  }
  int k = int(log2(2 * n)) + 1;
  for (int j = 1; j <= k; j++)
    for (int i = 1; i <= 2 * n; i++) {
      int t1 = f1[i][j - 1].first;
      int t2 = f1[i][j - 1].second;
      int t3 = f1[min(i + (1 << (j - 1)), 2 * n)][j - 1].first;
      int t4 = f1[min(i + (1 << (j - 1)), 2 * n)][j - 1].second;
      if (z[t1] <= z[t3]) {
        f1[i][j].first = t3;
        f1[i][j].second = (z[t1] >= z[t4]) ? t1 : t4;
      } else {
        f1[i][j].first = t1;
        f1[i][j].second = (z[t3] >= z[t2]) ? t3 : t2;
      }
      t1 = f2[i][j - 1].first;
      t2 = f2[i][j - 1].second;
      t3 = f2[min(i + (1 << (j - 1)), 2 * n)][j - 1].first;
      t4 = f2[min(i + (1 << (j - 1)), 2 * n)][j - 1].second;
      if (x[t1] <= x[t3]) {
        f2[i][j].first = t3;
        f2[i][j].second = (x[t1] >= x[t4]) ? t1 : t4;
      } else {
        f2[i][j].first = t1;
        f2[i][j].second = (x[t3] >= x[t2]) ? t3 : t2;
      }
    }
  for (int i = 1; i <= m; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    if (u <= v) {
      int u1 = u;
      u = v + 1;
      v = u1 + n - 1;
    } else {
      swap(u, v);
      u++;
      v--;
    }
    pair<int, int> q = tim1(u, v);
    pair<int, int> w = tim2(u, v);
    if (q.first != w.first) {
      printf("%I64d\n", z[q.first] + x[w.first]);
      continue;
    }
    printf("%I64d\n", max(z[q.first] + x[w.second], z[q.second] + x[w.first]));
  }
}
