#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
using ll = long long;
using pli = pair<ll, int>;
int n, m, d[N], h[N], lg2[N];
ll s[N];
pli f[N][20], g[N][20];
pli query_f(int l, int r) {
  if (r < l) return pli(LLONG_MIN, 0);
  int tmp = lg2[r - l + 1];
  return max(f[l][tmp], f[r - (1 << tmp) + 1][tmp]);
}
pli query_g(int l, int r) {
  if (r < l) return pli(LLONG_MIN, 0);
  int tmp = lg2[r - l + 1];
  return max(g[l][tmp], g[r - (1 << tmp) + 1][tmp]);
}
ll query_ans(int l, int r) {
  pli t1 = query_f(l, r), t2 = query_g(l, r);
  if (t1.second != t2.second) return t1.first + t2.first;
  pli t3 = max(query_f(l, t1.second - 1), query_f(t1.second + 1, r));
  pli t4 = max(query_g(l, t2.second - 1), query_g(t2.second + 1, r));
  return max(t1.first + t4.first, t2.first + t3.first);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> m;
  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 = 2; i <= n * 2; i++)
    s[i] += s[i - 1] + d[i - 1], lg2[i] = lg2[i >> 1] + 1;
  int l, r, ll, rr;
  for (int i = 1; i <= n * 2; i++)
    f[i][0] = pli(h[i] * 2 + s[i], i), g[i][0] = pli(h[i] * 2 - s[i], i);
  for (int j = 1; j < 20; j++)
    for (int i = 1; i <= n * 2 - (1 << j) + 1; i++)
      f[i][j] = max(f[i][j - 1], f[i + (1 << (j - 1))][j - 1]),
      g[i][j] = max(g[i][j - 1], g[i + (1 << (j - 1))][j - 1]);
  for (int i = 1; i <= m; i++) {
    cin >> l >> r;
    if (r >= l)
      ll = r + 1, rr = n + l - 1;
    else
      ll = r + 1, rr = l - 1;
    cout << query_ans(ll, rr) << endl;
  }
  return 0;
}
