想询问一下这个程序出现Segmentation Fault(后面有原题)

问题遇到的现象和发生背景

在VJ平台显示Segmentation Fault

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
#define N 10000
int main()
{
    int m,n;
    int i,j;
    int a[N],b[N];
    int min,max,res=0;
    while(~scanf("%d%d",&m,&n))
    {
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(j=0;j<n;j++)
        {
            scanf("%d",&b[j]);
        }
        max=min=a[0];
        for(j=0;j<n;j++)
        {
            if(b[j]<=n)
            {
            for(i=0;i<b[j];i++)
            {
                if(max<a[i])
                {
                    max=a[i];
                }
                if(min>a[i])
                {
                    min=a[i];
                }
            }
            res=max-min;
            printf("%d",res);
            if(j!=n-1)
                printf(" ");
            res=0;
        }
        else
            break;

    }
    printf("\n");
    }
    return 0;
}


运行结果及报错内容

原题:
蒜头君有 nn 个数,他提出了 qq 个问题,每个问题是说,询问前 xx 个数的极差(最大值减最小值)。你能帮助他解决这 qq 个问题吗?

输入格式
第一行两个整数 n, q(1 \leq n, q \leq 10 ^ 5)n,q(1≤n,q≤10
5
)

第二行 nn 个整数 a_i(1 \leq a_i \leq 10 ^ 9)a
i

(1≤a
i

≤10
9
) 表示蒜头君的 nn 个数

第三行 qq 个整数 x_i(1 \leq x_i \leq n)x
i

(1≤x
i

≤n) ,表示每一次询问

输出格式
输出一行,包含 qq 个整数,表示每一次询问的答案

数据范围
对于 60%60% 的数据, 1 \leq n, q \leq 10 ^ 31≤n,q≤10
3

对于 100%100% 的数据,1 \leq n, q \leq 10 ^ 51≤n,q≤10
5

Sample Input
5 5
3 2 4 5 1
1 2 3 4 5
Sample Output
0 1 2 3 4

我的解答思路和尝试过的方法
我想要达到的结果

你输入m干啥用呢?